我已经尝试过解决方案here,但它不起作用。
我的表是这样的:
`Index` uid dept
...........................
1 001 dept1
2 001 dept2
3 001 dept3
4 002 dept2
5 002 dept3
6 002 dept4
7 003 dept1
8 003 dept5
9 004 dept1
10 004 dept6
我想检索具有特定dept
的所有行。也就是说,如果我想要检索dept1
,我想检索除uid = 002之外的所有行,因为uid = 002没有dept1
。
即使使用index:
,查询字符串也很慢SELECT id FROM table WHERE uid IN
(SELECT uid WHERE dept='dept1')
我之前没有使用WHERE IN的版本如下:
首先使用dept = dept1检索所有uid 然后对第一个查询中检索到的所有uid使用for循环。
对于在第一个查询中检索到的少量(100)行,此方法非常快。但是,它似乎不是一个好的解决方案,因为它会产生大量的查询(每个查询都非常快)。
答案 0 :(得分:8)
试试这个:
select a.id from Table1 a
inner join Table1 b on a.uid = b.uid and b.dept = 'dept1';