我试图将2个结果放入1个html表中,用户被踢或被禁止的结果。 UUID是每个用户的唯一代码。
我试图在html表中获取用户的历史记录,这包括踢和禁令。现在这个历史上只有禁令,我也试图加入踢球。这个查询工作正常,但它只显示禁令。
SELECT BAT_ban.ban_staff, BAT_ban.ban_state, BAT_ban.ban_server, BAT_ban.ban_begin, BAT_ban.ban_end, BAT_ban.ban_id, BAT_kick.kick_id, BAT_ban.ban_reason, BAT_players.BAT_player, ban_soort
FROM BAT_players
INNER JOIN BAT_ban
ON BAT_ban.UUID=BAT_players.UUID
不幸的是,它没有使用此查询,它给了我一个空的历史记录。我第二次内部联接的错误是什么?
SELECT BAT_ban.ban_staff, BAT_ban.ban_state, BAT_ban.ban_server, BAT_ban.ban_begin, BAT_ban.ban_end, BAT_ban.ban_id, BAT_kick.kick_id, BAT_ban.ban_reason, BAT_players.BAT_player, ban_soort
FROM BAT_players
INNER JOIN BAT_ban
ON BAT_ban.UUID=BAT_players.UUID
INNER JOIN BAT_kick
ON BAT_kick.UUID=BAT_players.UUID ORDER BY ban_id DESC
;
谢谢!
答案 0 :(得分:0)
尝试使用LEFT JOIN
:
SELECT BAT_ban.ban_staff, BAT_ban.ban_state, BAT_ban.ban_server, BAT_ban.ban_begin, BAT_ban.ban_end, BAT_ban.ban_id, BAT_kick.kick_id, BAT_ban.ban_reason, BAT_players.BAT_player, ban_soort
FROM BAT_players LEFT JOIN
BAT_ban ON BAT_ban.UUID=BAT_players.UUID LEFT JOIN
BAT_kick ON BAT_kick.UUID=BAT_players.UUID
ORDER BY ban_id DESC
用空字符串替换NULL
值(对于SQL Server
):
SELECT ISNULL(BAT_ban.ban_staff,''), ISNULL(BAT_ban.ban_state,''), ISNULL(BAT_ban.ban_server,''), ISNULL(BAT_ban.ban_begin,''), ISNULL(BAT_ban.ban_end,''), ISNULL(BAT_ban.ban_id,''), ISNULL(BAT_kick.kick_id,''), ISNULL(BAT_ban.ban_reason,''), BAT_players.BAT_player, ban_soort
FROM BAT_players LEFT JOIN
BAT_ban ON BAT_ban.UUID=BAT_players.UUID LEFT JOIN
BAT_kick ON BAT_kick.UUID=BAT_players.UUID
ORDER BY ban_id DESC
对于MySQL
,请将ISNULL
替换为IFNULL
。
答案 1 :(得分:0)
INNER JOIN 在两个表中都需要一个值,因此如果您将其用于踢和禁令,您将只会看到被踢和被禁止的用户。
要显示被禁止或被禁止的用户,您需要将两个联接更改为LEFT JOIN,这实际上意味着如果可以的话加入#34;但不要丢弃行如果你不能"#34;这将包括既未被踢过也未被禁止的用户,因此您还需要WHERE子句中的额外条件BAT_ban.ban_id IS NOT NULL OR BAT_kick.kick_id IS NOT NULL
。
请注意,如果用户有多次禁止和多次踢球,这将为禁令和踢球的每个组合产生一行,因为没有规则来确定哪个禁令应与哪个禁区对齐。
另一种方法是编写两个查询,每个查询使用INNER JOIN,然后组合结果。如果为它们提供相同数量和类型的输出列(对于那些不适用的列留下NULL),可以使用UNION运行它们并一次性返回完整的结果集。
答案 2 :(得分:0)
问题在于" null"在任何内部联接上将从结果集中消除该行。
一种解决方案(也许是最佳解决方案)是使用左连接。
另一种方法是采用两个内连接的UNION。
这是帮助可视化内部,外部,左侧和右侧连接的绝佳链接:
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins