2012-02-03 18 views
2

私は2つのテーブルusersとuser_deptsを持っています。 (この質問のために)ユーザーには「ID」列のみがあり、user_deptsには2つの「uid」と「did」があるとしましょう。mysql:2つのテーブル、3つの選択条件

特定のユーザーIDを持つすべての部門のすべてのユーザーIDを返すSQL行を探しています(これはPHPから動的になりますが、7とします)。

私が試したことはある:

​​

しかし、もちろん、これは7に何もなく、返さないん私は自分自身にテーブルを結合するために持っているかもしれないと思うが、私は唯一参加するためのショートカット構文を知っています、それは十分ではないようです。どんな指針も大変ありがとう!

答えて

1

使用EXISTS

SELECT uid FROM user_depts 
WHERE EXISTS (
    SELECT * FROM user_depts a 
    WHERE uid = 7 AND a.did = user_depts.did 
) 
+0

これはうまくいくと思いますが、無関係のサブクエリよりも遅くなると思います。私の答えを確認してください... –

+0

jaw-droppingly quick and perfect作業応答。ありがとうございました! – yycroman

0

私は(しかし これ、の7を言わせを指定してユーザID、すべての 部門のためのすべてのユーザーIDを返しますSQL行を探していますPHPから動的に来ます)が関連付けられています。

これはあなたがユーザーIDを持つすべてのユーザーを見つけるしたい場合意味:7それに接続され、このuser_departentを持っているあなたのクエリです:で をしたuser_deptsから

select users.id from users 
inner join user_depts.uid = users.id 
where users.id = 7 
0

選択UID(選択UID = 7)

  1. まず、すべてのユーザがサブクエリ
  2. を使用して関連付けられているたが、次に、すべての選択選択user_deptsからやっ選択した部門のuser_id。

あなたがそれを行う最良の方法です。 と繰り返し結果を削除したい場合は、別名を使用することができます