如何在 left join select mysql query 中传递变量 user.phone_number

问题描述 投票:0回答:1

这是我的查询。我想在 order_botorder 表的左连接选择查询中传递 user.phone_number 变量,该表的限制为 1

select
user.id as id,
user.updated_at as updated_at,
if(user.name is not null, user.name, "No Name") as name,
user.phone_number as phone_number,
user.created_at as member_since,
sum(if(offer_item.card_type="FIXED",offer.list_price,offer_item.custom_value)) as total_card_value,
sum(offer_item.redeemed_amount) as redeemed_amount,
if(offer_item.is_complete=0,count(offer_item.id),0) as active_gift_card,
bot_order.created_at
from account_firstuser as user
LEFT JOIN offer_offerorder as offer_order ON user.phone_number = offer_order.phone_number
LEFT JOIN offer_offeritem as offer_item ON offer_order.id = offer_item.offer_order_id
LEFT JOIN offer_offer as offer ON offer_item.offer_id = offer.id
LEFT JOIN (select * from order_botorder where store_id=1 and is_pos=0 and is_submitted=1 and phone_number=user.phone_number order by id desc limit 1) bot_order ON bot_order.phone_number = user.phone_number
where
user.store_id = 1 and
user.phone_number LIKE '%%' and
user.is_invalid = 0 and
user.is_blocked = 0
group by user.id,user.phone_number,offer_item.is_complete,bot_order.created_at
order by user.created_at
desc limit 10 offset 0

它给出了这个错误

查询错误(1054):“where”中的未知列“user.phone_number” 子句'

mysql left-join
1个回答
0
投票

子查询是一个完全独立的空间,所以如果你需要来自其他表的信息,你需要在子查询中再次加入。

我认为你可以删除子查询中的

phone_number
条件,因为你已经加入了这个专栏并且它应该可以正常工作。

SELECT
    user.id as id,
    user.updated_at as updated_at,
    if(user.name is not null, user.name, "No Name") as name,
    user.phone_number as phone_number,
    user.created_at as member_since,
    bot_order.created_at
    sum(if(offer_item.card_type="FIXED",offer.list_price,offer_item.custom_value)) as total_card_value,
    sum(offer_item.redeemed_amount) as redeemed_amount,
    if(offer_item.is_complete=0,count(offer_item.id),0) as active_gift_card,
FROM account_firstuser as user
LEFT JOIN offer_offerorder as offer_order ON user.phone_number = offer_order.phone_number
LEFT JOIN offer_offeritem as offer_item ON offer_order.id = offer_item.offer_order_id
LEFT JOIN offer_offer as offer ON offer_item.offer_id = offer.id
LEFT JOIN (SELECT * FROM order_botorder WHERE store_id=1 AND is_pos=0 AND is_submitted=1 order by id desc limit 1) bot_order ON bot_order.phone_number = user.phone_number
WHERE
    AND user.store_id = 1
    AND user.phone_number LIKE '%%'
    AND user.is_invalid = 0
    AND user.is_blocked = 0
GROUP BY user.id,user.phone_number,offer_item.is_complete, bot_order.created_at
ORDER BY user.created_at DESC 
LIMIT 10 offset 0
© www.soinside.com 2019 - 2024. All rights reserved.