简体   繁体   English

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

[英]MYSQL: Exclude Rows in join if row in join table matches

let's say i have the following two tables: 假设我有以下两个表:

Table Orders
ID | Order_ID | Products_ID
1       a          22912
2       b          22912
3       c          22912

Table Products
ID     | more stuff
22912     lorem ipsum

So far really easy. 到目前为止真的很容易。 With joins i can get every info i want. 通过加入,我可以获得我想要的所有信息。 But i want a joined query thats returns Null if a Product has a order from a sepcial order id. 但是我想要一个联合查询,如果一个产品具有来自另一个订单ID的订单,则返回Null。 That means if i get a match on order id then null should be returned for the product. 这意味着,如果我在订单ID上得到匹配,则该产品应返回null。

i tried in different ways: 我尝试了不同的方式:

SELECT * FROM Products p JOIN orders o ON p.ID=o.Products_ID WHERE Order_ID !='a'

with that i'll get the 2 for b & c order id. 这样,我将得到b&c订单ID的2。

Allright next try: 好的,接下来尝试:

select * from Products p JOIN (select * FROM Orders o WHERE WHERE Order_ID !="a") jo ON p.ID=jo.Product_ID

Hmm same query, same result. 嗯,相同的查询,相同的结果。 Result should be empty if one Order_ID matches. 如果一个Order_ID匹配,结果应为空。 Anyone an Idea how to solve that within one query. 任何人都可以在一个查询中解决该问题。 I think the second query is the key but how to write the subquery that it returns empty result? 我认为第二个查询是关键,但是如何编写返回空结果的子查询呢?

you can use the case statement, check the below code 您可以使用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

试试这个查询:

SELECT  * FROM  orders o  Left JOIN   Products p ON p.ID=o.Products_ID and o.Order_ID !='a'

Try This 尝试这个

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' SELECT TEMP。* FROM(从产品p。*,o.ORDER_ID FROM产品p加入订单o ON p.ID = o.PRODUCT_ID WHERE o.Order_ID ='a')作为TEMP WHERE TEMP.ORDER_ID!='a'

select p.*, null as somecolumn
from p
join o on o.products_id = p.id
where o.order_id = 'a';

Returns 返回

+-------+-------------+------------+
| ID    | morestuff   | somecolumn |
+-------+-------------+------------+
| 22912 | lorem ipsum |       NULL |
+-------+-------------+------------+
1 row in set (0.00 sec)

Fulfills your requirement if i get a match on order id then null should be returned for the product .But that doesn't make sense to me and there does not seem to be a relationship other than by product between orders a,b,c 如果我在订单ID上匹配,则满足您的要求, 则该产品应返回null 。但这对我来说没有意义,并且订单,a,b,c之间除产品外似乎没有其他关系

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM