-4

表结构

我从log_table中选择,user_id changes但选择时,我希望在user_name表中user_id对应username,其中log_table和user_table匹配的ID。

4

3 回答 3

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

于 2013-03-15T18:36:04.923 回答
2

你想要的是一个JOIN。查看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
于 2013-03-15T18:21:32.700 回答
1
SELECT l.changes, u.username
FROM LOG_TABLE l
JOIN USER_TABLE u on u.id=l.user_id
于 2013-03-15T18:44:13.067 回答