我试图在另一个表列值中找到一个列值。
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 )
但是它没有返回任何值。我犯了错误?感谢....
答案 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