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. つまり、取得したい場合は、dept1uid=002 がないdept1ため、uid=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 に答える