来自其他表的SQL if子查询
我有一个查询,它有相当多的约束并返回项。 Items表如下所示(简化): 然后我有一个表架,其中有字段:来自其他表的SQL if子查询,sql,sql-server,Sql,Sql Server,我有一个查询,它有相当多的约束并返回项。 Items表如下所示(简化): 然后我有一个表架,其中有字段: Item_id | Price 我从外部服务收到的代码(code项目中的列)不应出现在结果中: (code NOT IN ('" + Joiner.on("', '").join(codesToSkip) + "') 现在我需要更改它,这样,如果Item\u id在表shelfs中,我就不会考虑从externla服务收到的codesToSkip 因此,总结一下: 1.如果Item\u
Item_id | Price
我从外部服务收到的代码(code
项目中的列)不应出现在结果中:
(code NOT IN ('" + Joiner.on("', '").join(codesToSkip) + "')
现在我需要更改它,这样,如果Item\u id
在表shelfs
中,我就不会考虑从externla服务收到的codesToSkip
因此,总结一下:
1.如果Item\u id
在shelfs
中,则跳过关于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)
- 这里有一个问题——我想把它变成一个if语句——如果Items中的Item.id在shelfs中,那么就删除Items.code的约束
EXISTS
和或:
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有时会允许双引号,但我不建议依赖这种行为。让您的帮助变得容易:您的dbms是什么?我们正在使用SQL Server
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)