如何在sql server中使用NOT EXISTS

时间:2014-02-24 16:59:53

标签: sql sql-server

我试图在另一个表列值中找到一个列值。

e.g

Product_Name(tb_new_purchase)
1.car
2.bus
3.truck 


Product_Name(tb_new_product_Name_id)
1.car

我需要选择公共汽车和卡车

这是我的代码

SELECT Product_Name
FROM tb_new_purchase
WHERE  NOT EXISTS (SELECT Product_Name FROM tb_new_product_Name_id )

但是它没有返回任何值。我犯了错误?感谢....

6 个答案:

答案 0 :(得分:1)

使用NOT IN或将字段传递到NOT EXISTS

SELECT Product_Name
FROM tb_new_purchase
WHERE Product_Name NOT IN(SELECT Product_Name FROM tb_new_product_Name_id)

SELECT Product_Name
FROM tb_new_purchase
WHERE NOT EXISTS (SELECT Product_Name FROM tb_new_product_Name_id
                  WHERE tb_new_product_Name_id = tb_new_purchase.Product_Name  )

答案 1 :(得分:0)

这就是你需要的:

SELECT Product_Name FROM tb_new_purchase WHERE Product_Name NOT IN(SELECT Product_Name FROM tb_new_product_Name_id)

答案 2 :(得分:0)

您的查询正在tb_new_product_Name_id中检查所有产品名称。如果表不为空,则它传递where子句。我想你想要一个相关的子查询:

SELECT np.Product_Name
FROM tb_new_purchase np
WHERE  NOT EXISTS (SELECT 1
                   FROM tb_new_product_Name_id npni
                   WHERE np.Product_Name = npni.Product_Name
                  );

答案 3 :(得分:0)

您需要添加条件来限制子查询。如果您执行查询

SELECT Product_Name FROM tb_new_product_Name_id

它总是返回一些记录,因此NOT EXISTS是错误的。尝试像

这样的东西
SELECT Product_Name
FROM tb_new_purchase
WHERE  NOT EXISTS (SELECT Product_Name 
                     FROM tb_new_product_Name_id 
                    WHERE tb_new_purchase.id = tb_new_product_Name_id.id)

答案 4 :(得分:0)

我知道这里已经有5个答案....但是只是把它扔出去,你可以做这个作为连接而不是存在的地方。子查询确实会阻碍性能和运行时。在MSSQL中,运行时应该大致相同......是MySQL,这种连接语法效果要好得多。

Select a.product_name
from tb_new_purchase a
left join tb_new_product_Name_id b on a.product_name = b.product_name
where b.product_name is null

只要product_name不在b表中,在此处使用左连接将在b.product_name列中生成null。如果product_name为null,则对所有在此处的“b”表中都有条目的行进行过滤。

答案 5 :(得分:0)

您可以使用EXCEPT来实现您的需求:

SELECT  Product_Name
FROM tb_new_purchase
EXCEPT
SELECT Product_Name 
FROM tb_new_product_Name_id