Mysql SQL联接4表

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.

我想显示团队领导的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.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;