将用户表连接到内容表的正确方法?

时间:2015-08-25 20:48:20

标签: mysql join left-join

所以我有两张桌子。

一个存储用户,名为user

id     date_joined      username
1      2014-12-12       UserA
2      2014-11-11       UserB

另一个存储内容,名为article

id     user_id      date           content
1      1            2014-10-10     content here
2      1            2014-11-10     content here
3      2            2014-12-10     content here
4      1            2014-13-10     content here

查询此数据以获取每个用户的用户名以及内容的正确方法是什么?

我目前有这个:

SELECT user.username, article.date, article.content
FROM article
LEFT JOIN user ON user.id = article.user_id
ORDER BY article.date

哪个有效,但是完全猜测。这是正确的查询吗?我是否需要所有元素中的user.article.?或者仅针对LEFT JOIN位?

这也是正确/推荐的吗?

SELECT username, date, content
FROM article
LEFT JOIN user ON user.id = article.user_id
ORDER BY date

2 个答案:

答案 0 :(得分:0)

只有在两者都有相同名称的列的情况下才需要 table.column 语法。如果只有一个选项 - 没有必要(虽然在我看来会让查询更清晰)

至于查询本身 - 它很好,但有一件事你需要知道(并决定你想要什么,不清楚你的问题) - 左连接或内连接。 内部联接 - 将只给出两个表中存在的结果(即 - 如果user_id 3存在于文章而不是用户 - 你不会得到它。使用左联接 - 在这种情况下你将得到user_id 3记录,带有值来自article表,并且用户表列上的空值 所以这取决于需要决定哪个,但基本上你的查询很好

答案 1 :(得分:0)

我喜欢使用别名作为表名。我认为它更容易阅读。使用RIGHT JOIN,它将返回右表(文章)中的所有内容,该表也出现在右表(文章)中。

SELECT u.username, a.date, a.content
FROM article AS a
RIGHT JOIN user AS u
ON u.id = a.user_id
ORDER BY a.date

LEFT JOIN只会生成左表(用户)

中id的匹配项