SQL,如果从其他表子查询

时间:2018-09-18 07:17:33

标签: sql sql-server

我有一个查询,该查询有很多约束并返回 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_idShelves中,则跳过关于code

的约束
  1. 如果不是,则必须使用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在货架上,则删除关于Items.code的约束

1 个答案:

答案 0 :(得分:1)

我们可以在非常简单的where子句中使用pre-flightEXISTS

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有时会改为使用双引号,但我建议不要依靠这种行为。