我有一个查询,该查询有很多约束并返回 Items 。 Items 表如下所示(简化):
Id | Name | Code
然后我有一个表 Shelves ,其中有字段:
Item_id | Price
从外部服务中,我收到的代码(Code
中的Items)
列应该不在结果中:
(code NOT IN ('" + Joiner.on("', '").join(codesToSkip) + "')
现在我需要进行更改,因此,如果Item_id
在表Shelves
中,那么我就不会考虑从externla服务收到的codesToSkip
。
所以总结一下:
1.如果Item_id
在Shelves
中,则跳过关于code
code
约束。编辑: 立即查询:
SELECT * FROM Items WHERE Items.code NOT IN ("XX", "WWW")
更改后查询:
SELECT * FROM Items WHERE (Items.code NOT IN ("XX", "WWW") OR Items.id IN Shelves.Item_id)
答案 0 :(得分:1)
我们可以在非常简单的where子句中使用pre-flight
和EXISTS
:
OR
希望您可以轻松地看到,如果该项目在架子上,则SELECT
* --TODO, explicit column list
FROM Items i
WHERE EXISTS (SELECT * FROM Shelves s where s.Item_ID = i.ID)
OR Code NOT IN (1,4,5)
是什么都没有关系,并且只有当它不在架子上时,Code
是否包含在其中才有意义。我们要避免的代码列表。
顺便说一句,对于SQL中要用作字符串文字的事物,应避免使用双引号。字符串文字的正确分隔符是单引号。 SQL Server有时会改为使用双引号,但我建议不要依靠这种行为。