我在理解MYSQL连接语法时遇到了问题。我无法为我的目的操纵它。我不得不使用几个月的工作,导致额外的查询只是为了检索一个额外的列。
场景:我有两张桌子..
Table.Stories - 包含故事以及添加故事的用户ID。
id,story,userid
Table.Users - 包含用户详细信息和用户ID
id,用户名
我想检索包含用户ID的故事表以及一个名为username的新列(我想是动态生成的),其中包含来自 Table.Users的相应用户名
我猜我会使用 AS 和 LEFT JOIN 语法的混合。但我真的不知道了..
答案 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
对于没有用户的故事记录,用户名字段将返回为空。