我有一个包含user_id和lastreply_by_user_id列的表,我正在寻找一种方法来匹配他们的列与用户表中带有id的用户名。
SELECT
table_threads.*,
table_users.username
FROM
threads AS table_threads
INNER JOIN users as table_users ON table_threads.user_id = table_users.id
OR table_threads.lastreply_by_user_id = table_users.id
WHERE
table_threads.category_id = :category_id
这是我现在的代码,但目前这会创建重复的条目而不是合并的条目。
最近刚刚开始使用SQL,发现JOIN命令可能不是正确的,只是指出我正确的方向,我会很感激。
答案 0 :(得分:2)
您需要为同一个user
表添加两个联接:一个通过user_id
连接,另一个通过lastreply_by_user_id
连接。使用表别名消除歧义:
SELECT
t.*,
u.username as user_name,
r.username as last_reply_name
FROM
threads AS t
INNER JOIN users as u ON t.user_id = u.id -- actual user
INNER JOIN users as r ON t.lastreply_by_user_id = r.id -- reply user
WHERE
table_threads.category_id = :category_id