我正在使用两个子查询。如果我传递null或空值,则抛出异常
异常消息
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我的查询
SELECT A.Product_Name AS [Product Name], A.Product_Id AS [Product Id], B.[DuplicateId]
FROM tb_new_product_Name_id AS A,
(
SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id= (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
) AS B
WHERE Product_Name LIKE '%'+@product_name_id+'%' OR Product_Id like '%'+@product_name_id+'%';
我的错误在哪里?
答案 0 :(得分:2)
通常,子查询应该只返回一条记录,但有时它也可以在与where子句中的IN,NOT IN等运算符一起使用时返回多条记录。查询就像,
SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id IN (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
答案 1 :(得分:1)
更改此部分
WHERE Product_id= (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
改为使用IN
WHERE Product_id IN (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
确定指定的值是否与子查询中的任何值匹配 或列表。
答案 2 :(得分:1)
SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id= (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
) AS B
使用 Product_id IN 代替 Product_id =
因为如果你使用
Product_id = SELECT Product_id FROM tb_new_product_Name_id WHERE Product_Name = @ product_name_id
它可能会返回多个值,因此请使用 Product_id IN
所以这是正确的查询
SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id IN (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
) AS B
答案 3 :(得分:0)
试试这个
WHERE Product_id in (SELECT Product_id
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
)
OR
WHERE Exists (SELECT 1
FROM tb_new_product_Name_id
WHERE Product_Name=@product_name_id
and tb_new_product_Name_id_duplicate.Product_ID = tb_new_product_Name_id.Product_id
)
您可以使用依赖查询速度