所以我有两张桌子。
一个存储用户,名为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
答案 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的匹配项