我正在从LOG_TABLE user_id
changes
中进行选择,但在选择我希望user_id
与USER_NAME表中的username
相对应时,其中LOG_ABLE和USER_TABLE的ID匹配。
答案 0 :(得分:3)
我在这里提供一个额外的答案,因为你刚刚开始。此INNER JOIN代码将从LOG_TABLE中选择与USER_TABLE匹配的每一行。
SELECT l.id, l.changes, u.username
FROM LOG_TABLE l
INNER JOIN USER_TABLE u ON u.id = l.user_id
如果你想从LOG_TABLE中选择,但是真的不关心它是否在USER_TABLE中匹配,你可以改为LEFT JOIN:
SELECT l.id, l.changes, u.username
FROM LOG_TABLE l
LEFT JOIN USER_TABLE u ON u.id = l.user_id
在编写JOIN时,明确说明JOIN关键字和条件总是一个好主意。如果使用隐式JOIN(FROM子句后面列出的表,用逗号分隔),如果意外省略了WHERE子句,则存在生成笛卡尔积的风险。
案例分析,这是OP使用逗号分隔的JOIN表示法,并无意中创建了笛卡尔积的问题:MySQL Query - Join Issues
答案 1 :(得分:2)
你想要的是一个加入。查看http://dev.mysql.com/doc/refman/5.0/en/join.html对于这个具体的例子,你想要的是这样的东西:
SELECT l.changes, u.username
FROM LOG_TABLE l, USER_TABLE u
WHERE u.id=l.user_id
答案 2 :(得分:1)
SELECT l.changes, u.username
FROM LOG_TABLE l
JOIN USER_TABLE u on u.id=l.user_id