我完全清楚我可以使用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。
答案 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;