MySQL加入语法

时间:2009-11-02 21:31:07

标签: sql mysql join

我在理解MYSQL连接语法时遇到了问题。我无法为我的目的操纵它。我不得不使用几个月的工作,导致额外的查询只是为了检索一个额外的列。

场景:我有两张桌子..

Table.Stories - 包含故事以及添加故事的用户ID。

id,story,userid

Table.Users - 包含用户详细信息和用户ID

id,用户名

我想检索包含用户ID的故事表以及一个名为username的新列(我想是动态生成的),其中包含来自 Table.Users的相应用户名

我猜我会使用 AS LEFT JOIN 语法的混合。但我真的不知道了..

6 个答案:

答案 0 :(得分:4)

SELECT s.id, s.story, s.userid, u.username FROM stories AS s INNER JOIN users AS u ON s.userid=u.id

接下来的说明。

答案 1 :(得分:1)

以下查询可以帮助您:

SELECT s.story, u.username FROM Stories s 
LEFT JOIN Users u ON (u.id=s.userid)

它返回故事记录的story字段和相应用户的username的值。

答案 2 :(得分:0)

这应该有效:

SELECT s.id, s.story, u.username
FROM stories s
INNER JOIN users u
ON u.id = s.userid

这基本上说:“从Stories表中向我提供故事ID,故事名称和用户,从Users表中查找Users表ID与Stories表的用户ID匹配的用户名。”♦

答案 3 :(得分:0)

SELECT st.*, COALESCE(u.username, 'unknown') AS username
FROM Table.Stores st
LEFT JOIN Table.Users u ON st.userid = u.id

简单的;确保在Table.users中有一个id索引。 COALESCE函数返回第一个不为null的参数,因此您可以定义一个没有用户的故事的值。

如果您只对具有相应用户的故事感兴趣,请使用

SELECT st.*, u.username
FROM Table.Stores st
JOIN Table.Users u ON st.userid = u.id

内连接在此隐含,不需要指定。

答案 4 :(得分:0)

选择故事。*,来自故事内部的Users.username加入用户On Stories.userid = Users.id

OR

select * from stories inner join使用(userID)的用户(如果你保持一致的ID列)

答案 5 :(得分:0)

如果总是存在一对一的关系,即每个故事总是有一个用户,那么你应该使用内连接:

select t.id, t.story, t.userid, u.username
from Table.Stories t
inner join Table.Users u on u.id = t.userid

如果userid字段可以为null,表示故事可以有用户,则应使用左连接:

select t.id, t.story, t.userid, u.username
from Table.Stories t
left join Table.Users u on u.id = t.userid

对于没有用户的故事记录,用户名字段将返回为空。