У меня есть a user
таблица и a 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
столбцы показывают имена пользователей, а не идентификаторы.
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 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
Я предпочитаю подзапросы, так как считаю их более понятными...
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;
Подзапросы обычно переписываются оптимизатором запросов, если у вас есть какие-либо проблемы с производительностью.