我有一张名为“订单”的表
order_id
customer_name
item
并将其加入另一个名为“orders_requests”的表,其中包含
order_id
requests
“orders”中的一行可能在“order_requests”中有零行或多行。我正在尝试执行查询以查找具有“紧急处理”和“免费送货”的“orders_requests”的“订单”。我倾向于使用左侧的“orders_requests”表进行RIGHT OUTER JOIN,因此如果存在相应的“orders”行,它只会返回结果,但我对这些查询中的任何一个都没有成功。
这个不起作用,因为它会拉出急速处理或免费送货的行。
SELECT DISTINCT orders.order_id, orders.* ,
FROM orders_requests
RIGHT OUTER JOIN orders ON orders_requests.order_id = orders.order_id
WHERE orders_requests.requests
IN ('rush processing', 'free shipping')
这个显然不起作用,因为任何一行都不可能匹配这两个条件。
SELECT DISTINCT orders.order_id, orders.* ,
FROM orders_requests
RIGHT OUTER JOIN orders ON orders_requests.order_id = orders.order_id
WHERE orders_requests.requests = 'rush processing'
AND orders_requests.requests = 'free shipping'
我正在尝试使用我的表格设置,我是否需要更改结构?
答案 0 :(得分:2)
我不确定这是否有效,因为我无法测试它,但试试这个:
select a.order_id, b.*, c.*
from orders a
left outer join orders_requests b on b.order_id = a.order_id
left outer join orders_requests c on c.order_id = a.order_id
where b.requests = 'rush processing' and c.requests = 'free shipping'