0

我已经尝试过这里的解决方案,但它不起作用。

我的桌子是这样的:

   `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 之外的所有行,因为没有dept1uid=002。

即使使用索引,查询字符串也很慢:

SELECT id FROM table WHERE uid IN
(SELECT uid WHERE dept='dept1')

我以前没有使用 WHERE IN 的版本如下:

首先检索所有带有 dept=dept1 的 uid。
然后对在第一个查询中检索到的所有 uid 使用 for 循环。

对于在第一个查询中检索到的少量 (100) 行,此方法非常快。但是,这似乎不是一个好的解决方案,因为它会创建很多查询(每个查询都非常快)。

4

1 回答 1

8

试试这个:

select a.id from Table1 a
inner join Table1 b on a.uid = b.uid and b.dept = 'dept1';

演示:http ://sqlfiddle.com/#!2/05774/4

于 2012-04-05T05:38:56.197 回答