1

次の mySQL クエリを見てください。

SELECT fname,lname FROM users WHERE users.id IN (SELECT sub FROM friends WHERE friends.dom = 1 )

上記のクエリは、最初に内側のクエリを介してすべての friends.sub のセットを作成し、次に外側のクエリが、内側のクエリによって作成されたセット (つまり、2 つのセットの和集合) 内にユーザー ID が含まれているユーザーのリストを選択します。 .

そして、これはうまくいきます。しかし、内部セットに dom = 1 のサブだけでなく、サブ = 1 のドムも含める必要がある場合は、次のようになります。外部クエリは上記と同じままで、純粋な擬似コード:

(SELECT sub FROM friends WHERE friends.dom = 1 )
***AND***
(SELECT dom FROM friends WHERE friends.sub = 1 )

この種の機能を内部ク​​エリで作成することは可能ですか??

どんな助けや援助も感謝します;-D

どうもありがとう、私の頭痛はなくなりました!

4

2 に答える 2

1

これを試して:

SELECT u.fname, u.lname
FROM users u
INNER JOIN friends f
  ON (u.id = f.sub AND f.dom = 1)
  OR (u.id = f.dom AND f.sub = 1)
于 2010-10-09T15:21:27.243 に答える
1

何を正しく表現しているかはわかりませんsubが、そこでdom使用できるようです。UNION

SELECT fname, lname 
FROM   users 
WHERE  users.id IN 
       (  
          SELECT sub FROM friends WHERE friends.dom = 1 
          UNION
          SELECT dom FROM friends WHERE friends.sub = 1 
       );

テストケース:

CREATE TABLE users (id int, fname varchar(10), lname varchar(10));
CREATE TABLE friends (dom int, sub int);

INSERT INTO users VALUES (1, 'Bob', 'Smith');
INSERT INTO users VALUES (2, 'Peter', 'Brown');
INSERT INTO users VALUES (3, 'Jack', 'Green');
INSERT INTO users VALUES (4, 'Kevin', 'Jackson');
INSERT INTO users VALUES (5, 'Steven', 'Black');

INSERT INTO friends VALUES (1, 2);
INSERT INTO friends VALUES (1, 3);
INSERT INTO friends VALUES (4, 1);
INSERT INTO friends VALUES (3, 4);
INSERT INTO friends VALUES (5, 2);

結果:

+-------+---------+
| fname | lname   |
+-------+---------+
| Peter | Brown   |
| Jack  | Green   |
| Kevin | Jackson |
+-------+---------+
3 rows in set (0.00 sec)

そうは言っても、@Alecのソリューションはおそらくより効率的です。

于 2010-10-09T15:21:08.467 に答える