我正在尝试使用“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')
答案 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'
编辑:虽然接受的答案更容易扩展,但这个解决方案可能会返回更快的结果。