[英]joining the same table twice on different columns
我有一張user
表和一張complaint
表。
complaint
表具有以下結構:
[opened_by] [complaint_text] [closed_by]
(user_id) (text) (user_id)
(user_id) (text) (user_id)
(user_id) (text) (user_id)
所有用戶,包括抱怨者和投訴解決者都位於表user
。
如何編寫查詢以顯示兩列的用戶名?
這給了我一個:
SELECT user.username, complaint.complaint_text
FROM complaint
LEFT JOIN user ON user.user_id=complaint.opened_by
但我不知道怎么寫它所以_by
列顯示用戶名而不是ID。
SELECT
complaint.complaint_text,
A.username,
B.username
FROM
complaint
LEFT JOIN user A ON A.user_id=complaint.opened_by
LEFT JOIN user B ON B.user_id=complaint.closed_by
我更喜歡子查詢,因為我覺得它們更容易理解......
SELECT (SELECT name
FROM user
WHERE user_id = opened_by) AS opener,
(SELECT name
FROM user
WHERE user_id = closed_by) AS closer,
complaint_text
FROM complaint;
如果您有任何性能問題,則查詢優化器通常會重寫子查詢。
SELECT user1.username AS opened_by_username, complaint.complaint_text, user2.username AS closed_by_username
FROM user AS user1, complaint, user as user2
WHERE user1.user_id = complaint.opened_by
AND user2.user_id = complaint.closed_by
使用別名再次加入它(這就是用戶作為user2的東西)
使用此查詢:
SELECT opener.username as opened_by, complaint.complaint_text, closer.username as closed_by
FROM complaint
LEFT JOIN user as opener ON opener.user_id=complaint.opened_by
LEFT JOIN user as closer ON closer.user_id=complaint.closed_by
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.