MYSQL:如果连接表中的行匹配,则排除连接中的行

时间:2017-10-24 06:25:06

标签: php mysql

让我们说我有以下两个表:

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匹配,则结果应为空。任何人都知道如何在一个查询中解决这个问题。我认为第二个查询是关键,但如何编写它返回空结果的子查询?

4 个答案:

答案 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之间的乘积