让我们说我有以下两个表:
Table Orders
ID | Order_ID | Products_ID
1 a 22912
2 b 22912
3 c 22912
Table Products
ID | more stuff
22912 lorem ipsum
到目前为止真的很容易。通过加入,我可以得到我想要的每一个信息。但是,如果产品具有来自特殊订单ID的订单,我想要一个返回Null的连接查询。这意味着如果我在订单ID上获得匹配,则应该为产品返回null。
我以不同的方式尝试过:SELECT * FROM Products p JOIN orders o ON p.ID=o.Products_ID WHERE Order_ID !='a'
我将获得b& 2的2 c订单ID。
好吧接下来试试:
select * from Products p JOIN (select * FROM Orders o WHERE WHERE Order_ID !="a") jo ON p.ID=jo.Product_ID
同样的查询,同样的结果。如果一个Order_ID匹配,则结果应为空。任何人都知道如何在一个查询中解决这个问题。我认为第二个查询是关键,但如何编写它返回空结果的子查询?
答案 0 :(得分:1)
你可以使用case语句,检查下面的代码
SELECT
case
when o.Order_ID = 'a'
then 'null'
else
o.Order_ID
end as orderId
FROM Products p JOIN orders o
where p.ID = o.Products_ID
答案 1 :(得分:0)
尝试此查询:
Activity
答案 2 :(得分:0)
试试这个
SELECT TEMP。* FROM(SELECT p。*,o.ORDER_ID FROM Products p JOIN orders o ON p.ID = o.PRODUCT_ID WHERE o.Order_ID =' a')as TEMP WHERE TEMP。 ORDER_ID!=' a'
答案 3 :(得分:0)
select p.*, null as somecolumn
from p
join o on o.products_id = p.id
where o.order_id = 'a';
返回
+-------+-------------+------------+
| ID | morestuff | somecolumn |
+-------+-------------+------------+
| 22912 | lorem ipsum | NULL |
+-------+-------------+------------+
1 row in set (0.00 sec)
满足您的要求如果我在订单ID上获得匹配,那么应该为产品返回null 。但这对我没有意义,似乎没有关系除了订单a,b,c之间的乘积