在sql中使用多个和运算符

时间:2014-03-03 02:16:20

标签: sql

我完全清楚我可以使用IN函数,以便省略使用多个or运算符。如下所述:

  

SQL IN Condition用于帮助减少对多个OR条件的需求   在SELECT,INSERT,UPDATE或DELETE语句中。

此外,它允许我在select语句中使用OR运算符,如下面的代码所示:

SELECT Code FROM KeyDetails WHERE CodeKey 
IN (SELECT Keyword FROM @ValueTableAnd)

但我现在需要的是将它与and运算符一起使用。我知道IN无法做到这一点,但我可以在这种情况下使用哪些其他选项?

例如,我有关键字1108和1109.我想从keydetails获取所有代码,其中codekey是1108和1109.我目前正在考虑是否有更简单的方法来获得这些结果而不使用join。

2 个答案:

答案 0 :(得分:1)

你的直觉是正确的。您可以使用join执行此操作。这是一种方式:

select kd.code
from KeyDetails kd join
     @ValueTableAnd vta
     on kd.CodeKey = vta.keyword
group by kd.code
having count(*) = (select count(*) from @ValueTableAnd);

这将两个表连接在关键字上。然后计算匹配数。如果匹配数等于表中关键字的数量,那么所有都被计算在内,kd.code“通过”。请注意,这假定@ValueTableAnd中的值是唯一的。

如果您希望完全要匹配的关键字集,那么没有额外内容,那么代码会略有修改:

select kd.code
from KeyDetails kd left outer join
     @ValueTableAnd vta
     on kd.CodeKey = vta.keyword
group by kd.code
having count(*) = count(vta.keyword) and
       count(*) = (select count(*) from @ValueTableAnd);

第一个条件是“所有关键字都匹配”,第二个条件是“没有额外的”。

答案 1 :(得分:0)

如果您需要使用与and相关联的多个表达式,则只需使用与and相关联的多个表达式。

SELECT Code 
FROM KeyDetails 
WHERE CodeKey > 'aaa'
  AND CodeKey < 'amt';

您可以使用and引用多个列。

SELECT Code 
FROM KeyDetails 
WHERE CodeKey > 'aaa'
  AND CodeKey < 'amt'
  AND Code BETWEEN 30 and 50;
  

例如,我有关键字1108和1109.我想得到所有   来自keydetails的代码,其中codekey是1108和1109.我现在   思考是否有更简单的方法来获得这些结果   使用join。

您需要or,而不是and

...
WHERE CodeKey = 1108
   OR CodeKey = 1109;