首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内在的加入还是别的什么?

内在的加入还是别的什么?
EN

Stack Overflow用户
提问于 2014-05-03 19:33:51
回答 2查看 85关注 0票数 0

我正在尝试将两个结果放到一个html表中,这是用户被踢/被禁止的结果。UUID是每个用户的唯一代码。

  1. UUID存储在BAT_players中。
  2. 播放机名称也存储在BAT_players中。
  3. 有三个表: BAT_players,BAT_ban和BAT_kick

我试图在html表中获取用户的历史记录,这包括踢和禁令。现在在这个历史上只有禁令,我也在尝试加入踢腿。这个查询很好,它只显示了禁令。

代码语言:javascript
复制
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

不幸的是,它没有处理这个查询,它给了我一个空的历史记录。我的第二个内在连接有什么问题吗?

代码语言:javascript
复制
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
;

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-05-03 19:42:15

一个内部连接需要在两个表中都有一个值,所以如果您将它用于踢和禁止,您将只看到被踢和被禁止的用户。

要向被踢过或被禁止的用户显示,您需要将两个联接更改为左联接,这实质上意味着“如果可能,请加入,但如果不能,则不要丢弃行”。这将包括既没有被踢也没有被禁止的用户,所以您还需要在WHERE子句中添加一个附加条件,上面写着BAT_ban.ban_id IS NOT NULL OR BAT_kick.kick_id IS NOT NULL

请注意,如果用户有多个禁令和多个踢,这将产生一个行的每一个组合的禁令和踢,因为没有规则来确定哪一个禁令应该与哪个踢。

另一种方法是编写两个查询,每个查询使用内部连接,然后组合结果。如果给出输出列的相同数量和类型(对于不适用的列保留NULL ),则可以使用UNION运行这两个列,并一次返回完整的结果集。

票数 0
EN

Stack Overflow用户

发布于 2014-05-03 19:44:34

问题是,任何内部联接上的"null“将从结果集中消除该行。

一个解决方案(也许是最好的解决方案)是使用左联接。

另一种是接受两个内部连接的联盟。

这里有一个很好的链接,可以帮助可视化内、外、左和右连接:

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23448935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档