我不知道如果我理解正確的是什麼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's solution可能更有效率。
不錯的工作傢伙!這是最優化的方法嗎? – 2010-10-09 15:36:02
@ DJDonaL3000:是的,我相信。如果你打算有很多記錄,你應該確保'sub'和'dom'被正確地索引。您可以使用MySQL ['EXPLAIN'](http://dev.mysql.com/doc/refman/5.0/en/explain.html)命令查看查詢是否使用索引。 – 2010-10-09 15:37:57
用戶和朋友在不同的表格時如何自我加入? – Xailor 2010-10-09 15:39:23