【发布时间】:2015-11-20 14:48:18
【问题描述】:
我有 3 个连接在一起的表和一个表 NSR_Details,其中包含要在 3 个表的选择中排除的项目。
我可以排除从NSR_details 引用的详细信息,但是当我使用LIKE 搜索时,它仍会返回排除的数据。这是我的查询:
SELECT b.MainID
,a.Description
,b.ItemID
,b.Size
,c.Current_SRP
,b.Barcode
FROM IMF_SKU AS b
LEFT JOIN IMF_Main AS c ON c.MainID = b.MainID
LEFT JOIN IMF_Extensions AS a ON a.MainID = b.MainID
WHERE (a.Description LIKE 'BBB')
OR (b.Barcode LIKE 'BBB')
AND NOT EXISTS (
SELECT *
FROM INV_SKU_NSR_DetailsRepo
)
所以在 NSR_Details 我有 AAA 和 BBB 数据要排除,(其他有 AAA 和 BBB 详细信息以及 CCC、DDD、EEE 等不在 NSR_details 中。我只想在填写条件时排除 AAA 和 BBB WHERE 条件。如果有人问,我将使用 SSMS 作为我的 DBMS。
【问题讨论】:
-
NOT EXISTS 子查询需要在 WHERE 子句中引用主查询。
-
像这样在 WHERE 子句中具有 LEFT JOIN 的右侧表条件,使得 LEFT JOIN 作为常规 INNER JOIN 执行。移动到 ON 以获得真正的左连接行为。
-
为什么 LIKE 不带任何通配符?
-
你明白,但我们不明白 -- INV_SKU_NSR_DetailsRepo 表如何定义要排除的内容 -- 字段名称是什么,这些字段必须匹配哪些字段才能显示排除 -- 等等。我们需要详细信息。
标签: sql sql-server