Mysql SQL联接4表
我想显示团队领导的id,其中id=2 因此,输出应显示: 昵称字符名称位置 娃哈哈领袖你好 乌木奇奇成员Mysql SQL联接4表,mysql,sql,sql-server,Mysql,Sql,Sql Server,我想显示团队领导的id,其中id=2 因此,输出应显示: 昵称字符名称位置 娃哈哈领袖你好 乌木奇奇成员 1) user- id | nickname 5 hello 6 ouuu 7 youyou 2) team_leader- id | user_id | team_name | game |position 2 5 haha M.
1) user- id | nickname
5 hello
6 ouuu
7 youyou
2) team_leader- id | user_id | team_name | game |position
2 5 haha M.A Leader
3 7 nono M.A Leader
3) team_member- id | user_id | team_leader_id| game |position
1 6 2 M.A Member
4) user_game- id | user_id | game | character_game
1 5 M.A wahaha
2 6 M.A kiki
3 7 M.A popo
请注意精益SQL
加入试试这个:
首先,您不应该在查询中使用*in,只要它们不仅仅用于临时测试目的。即使一切按预期进行,也可能在以后导致意外错误,例如,当表模式发生更改时。始终明确列出要包含在查询中的字段
查询的问题是,联接的表中存在名称冲突。每个表都有一个id字段,因此您必须使用别名并通过限定名对其进行寻址,以便能够清楚地区分它们
SELECT
a.nickname,
b.position,
c.character_game
FROM user a
INNER JOIN team_leader b ON b.user_id=b.id
INNER JOIN user_game c ON c.id=c.user_id
WHERE a.id=5 OR a.id=6
顺便说一句:如果您的应用程序设计允许用户只能拥有引用用户id的部分子表,或者甚至没有子表,那么您应该考虑使用左外部联接。这将确保每个用户在结果中都有一行,即使是那些不是团队成员的用户,例如
SELECT u.id, u.nickname, t.id, t.user_id, t.team_name, t.game,
tm.id, tm.user_id, tm.team_id, ug.id, ug.user_id, ug.game, ug.character_game
FROM user AS u
JOIN user_game AS ug
ON ug.user_id = u.id
JOIN team AS t
ON t.user_id = u.id
JOIN team_member AS tm
ON t.id = tm.team_id
WHERE t.id = 2 AND ug.game = t.game
AND tm.team_id = 2;
失败是什么意思?是指结果错误选择*未选择*检查表数据…什么数据库?Microsoft SQL Server还是MySQL?
SELECT u.id, u.nickname, t.id, t.user_id, t.team_name, t.game,
tm.id, tm.user_id, tm.team_id, ug.id, ug.user_id, ug.game, ug.character_game
FROM user AS u
JOIN user_game AS ug
ON ug.user_id = u.id
JOIN team AS t
ON t.user_id = u.id
JOIN team_member AS tm
ON t.id = tm.team_id
WHERE t.id = 2 AND ug.game = t.game
AND tm.team_id = 2;
SELECT u.id, u.nickname, t.id, t.user_id, t.team_name, t.game,
tm.id, tm.user_id, tm.team_id, ug.id, ug.user_id, ug.game, ug.character_game
FROM user AS u
LEFT OUTER JOIN user_game AS ug
ON ug.user_id = u.id
LEFT OUTER JOIN team AS t
ON t.user_id = u.id
LEFT OUTER JOIN team_member AS tm
ON t.id = tm.team_id
WHERE t.id = 2 AND ug.game = t.game
AND tm.team_id = 2;