这个查询有什么问题吗?我得到空结果

时间:2017-07-03 09:10:41

标签: mysql sql right-join

SELECT `acart`.`order_number` AS `admin_order_number`, 
       `acart`.`user_id` AS `admin_user_id`, 
       `acart`.`created_by` AS `admin_created_by`, 
       `rcart`.`order_number` AS `renew_order_number`, 
       `rcart`.`user_id` AS `renew_user_id`, 
       `rcart`.`created_by` AS `renew_created_by`, 
       `scart`.`order_number` AS `shopping_order_number`,
       `scart`.`user_id` AS `shopping_user_id`,
       `scart`.`created_by` AS `shopping_created_by` 
FROM `cdp_order_transaction_master` AS `master`
LEFT JOIN `cdp_admin_shopping_cart` AS `acart` 
    ON `acart`.`order_number`=`master`.`order_number` 
LEFT JOIN `cdp_renew_cart` AS `rcart` 
    ON `rcart`.`order_number`=`master`.`order_number` 
LEFT JOIN `cdp_shopping_cart` AS `scart` 
    ON `scart`.`order_number`=`master`.`order_number` 
WHERE master.order_number IS NULL

让我解释一下我的问题,如果订单成功,那么它将转到cdp_order_transaction_master表和任何其他3个表(cdp_admin_shopping_cart,cdp_renew_cart,cdp_shopping_cart),具体取决于具体情况,但如果订单失败,那么它将不会转到cdp_order_transaction_master表并保留在其他表格中     所以我想要cdp_order_transaction_master中不存在的失败订单,并且可以出现在任何其他表中(cdp_admin_shopping_cart,cdp_renew_cart,cdp_shopping_c art)

1 个答案:

答案 0 :(得分:2)

WHERE master.order_number IS NULL

这是您的主表,所有其他表的连接条件都在此列上。

您正尝试将null加入null

根据您的评论,尝试:

select 'cdp_admin_shopping_cart' as `err_table`, a1.order_number
from cdp_admin_shopping_cart a1
where not exists (select 1 from cdp_order_transaction_master a2 where a2.order_number = a1.order_number)

union all

select 'cdp_renew_cart' as `err_table`, a1.order_number
from cdp_renew_cart a1
where not exists (select 1 from cdp_order_transaction_master a2 where a2.order_number = a1.order_number)

union all

select 'cdp_shopping_c‌​art' as `err_table`, a1.order_number
from cdp_shopping_c‌​art a1
where not exists (select 1 from cdp_order_transaction_master a2 where a2.order_number = a1.order_number)