我想如果我搜索courier_id = 950然后它将只采取那些不按顺序被拒绝的表courier_id = 950
for ex -
如果我搜索courier_id = 950,那么它只需要订单ID 852,853 bcoz这不是被拒绝的表格对courier_id = 950
请参阅以下示例
EX: -
订单表
id, ordername
850 test1
851 test2
852 test3
853 test4
订购拒绝的表格
id,courier_id,order_id
1 950 850
2 950 851
3 951 853
预期输出
订单表
id, ordername
852 test3
853 test4
以下是我的查询
SELECT o.id
FROM orders o
LEFT JOIN order_rejected_details r ON o.id = r.order_id
WHERE r.courier_id != 950
答案 0 :(得分:1)
使用左连接,您必须将条件传递到WHERE
子句到ON
子句
SELECT o.id
FROM orders o
LEFT JOIN order_rejected_details r
ON o.id = r.order_id AND r.courier_id != 950
<强> [UPDATE] 强>
在我阅读评论后,我认为正确的查询是使用子查询:
SELECT o.id
FROM orders o
WHERE
o.id NOT IN (
SELECT r.order_id
FROM order_rejected_details r
WHERE r.courier_id = 950
)
答案 1 :(得分:0)
使用LEFT JOIN并过滤NULL。
SELECT o.id, o.ordername
FROM orders o
LEFT JOIN order_rejected_details r ON r.order_id = o.id AND r.courier_id = 950
WHERE r.id IS NULL
答案 2 :(得分:0)
该条件消除了具有空值的行。因此必须添加额外的约束。 或者,
SELECT o.id, o.order_name FROM orders o LEFT JOIN orders_rejected r ON o.id = r. order_id
WHERE r.courier_id != 950 OR r.courier_id IS NULL
,或者
SELECT o.id, o.order_name FROM orders o LEFT JOIN orders_rejected r ON o.id = r. order_id
AND r.courier_id = 950 WHERE r.courier_id IS NULL
在前一代码中,首先连接行,然后删除带有'id!= 950'的行。在后一个代码中,加入时会删除带有“id!= 950”的行。
答案 3 :(得分:-1)
您可以将此查询用于您的目的。
SELECT * FROM `order` WHERE `order_id` NOT IN (SELECT GROUP_CONCAT(DISTINCT(r.order_id)) FROM order_reject r GROUP BY r.order_id )