SQL查询使用IN子句来选择两个条件,而不是或者

时间:2014-03-05 18:55:41

标签: sql

我正在尝试使用“in”子句创建一个查询,其中我需要IN子句中的所有内容都为true,即,只有myTable中包含nbrs 10和1的记录。目前我正在获取记录无论是1还是10.我一直在搜索SQL网站,似乎无法解决这个问题。列表可能更长,这就是我使用IN克劳斯的原因。有什么想法吗?

SELECT *
FROM myTable INNER JOIN
     myTable2
WHERE myTable.ID = myTable2.ID AND myTable2.nbr in ('10','1')

3 个答案:

答案 0 :(得分:1)

  SELECT myTable.ID 
    FROM myTable 
         INNER JOIN myTable2
               ON myTable.ID = myTable2.ID 
              AND table2.nbr IN ('10','1')
  GROUP BY myTable.ID 
  HAVING COUNT(DISTINCT table2.nbr) = 2 -- replace 2 with the number of elements in `IN` list

答案 1 :(得分:0)

使用exists会给你我认为理想的结果。您可以继续以这种方式为列表中所需的每个项目附加AND子句。

SELECT *
FROM myTable INNER JOIN myTable2 ON myTable.ID = myTable2.ID
WHERE EXISTS(SELECT 1 FROM myTable2 subTbl WHERE subTbl.ID=myTable2.ID AND subTbl.nbr='1')
  AND EXISTS(SELECT 1 FROM myTable2 subTbl2 WHERE subTbl2.ID=myTable2.ID AND subTbl2.nbr='10')

答案 2 :(得分:-1)

我认为这可能会给你你想要的东西。如果没有,您需要发布一些样本数据。

SELECT *
FROM myTable mt
INNER JOIN   myTable2 mt21 on mt.id = mt21.id and mt21.nbr = '1'
INNER JOIN   myTable2 mt22 on mt.id = mt22.id and mt22.nbr = '10'

编辑:虽然接受的答案更容易扩展,但这个解决方案可能会返回更快的结果。