Sql 使用空FKs多次连接一个表
在我有两张桌子的情况下:Sql 使用空FKs多次连接一个表,sql,database,Sql,Database,在我有两张桌子的情况下: 游戏(id、player1Id、player2Id) 球员(身份证、性别) 我想选择所有的游戏和玩家的性别,我如何绕过空玩家ID 从这个角度来看,我认为答案应该是: SELECT Games.id, p1.gender, p2.gender FROM Games JOIN Players p1 on player1Id = p1.id JOIN Players p2 on player2Id = p2.id 但是,这不会返回任何player1Id或player2
- 游戏(id、player1Id、player2Id)
- 球员(身份证、性别)
SELECT Games.id, p1.gender, p2.gender
FROM Games JOIN Players p1 on player1Id = p1.id
JOIN Players p2 on player2Id = p2.id
但是,这不会返回任何player1Id或player2Id为null的游戏。有没有一种方法可以在可能的情况下显示所有玩家连接的游戏
谢谢。您需要使用左连接:
SELECT g.id, p1.gender, p2.gender
FROM Games g
LEFT JOIN Players p1 ON p1.id = g.player1Id
LEFT JOIN Players p2 on p2.id = g.player2Id
这里有一个您需要使用左连接:
SELECT g.id, p1.gender, p2.gender
FROM Games g
LEFT JOIN Players p1 ON p1.id = g.player1Id
LEFT JOIN Players p2 on p2.id = g.player2Id
这里有一篇谢谢,很棒的文章。我留给google的唯一一件事就是左连接和左外部/内部连接之间的区别,以发现外部是默认的。再次感谢。@Mpair:是的,我自己觉得“外部”部分很冗长。这是做什么用的数据库?没什么特别的,只是做了一些表格来回答这个问题。我猜是好奇心驱动的数据库=这是一篇非常好的文章。我留给google的唯一一件事就是左连接和左外部/内部连接之间的区别,以发现外部是默认的。再次感谢。@Mpair:是的,我自己觉得“外部”部分很冗长。这是做什么用的数据库?没什么特别的,只是做了一些表格来回答这个问题。我猜是好奇心驱动的数据库=P
Games.player1Id
可以NULL
和Games.player2Id
可以NULL
?这听起来像是一个设计缺陷,也就是说,这不是一个表,因为它没有键。我认为你需要找到一种不同的方法来模拟单人游戏和双人游戏。@有一天这不是一个实际的数据库。我编了一些示例表,就是为了问这个问题。我只是好奇,因为我以前遇到过这个问题。您会惊讶地发现,编写SQL DML(“查询”)的困难往往是由于SQL DDL(“表设计”)不好造成的。SQLDDL中使用的数据元素名称可以揭示设计者的意图。因此,给我们一个机会,发布实际的模式:)否则,模式可能是好的,而是你的回忆是错误的;)Games.player1Id
可以NULL
和Games.player2Id
可以NULL
?这听起来像是一个设计缺陷,也就是说,这不是一个表,因为它没有键。我认为你需要找到一种不同的方法来模拟单人游戏和双人游戏。@有一天这不是一个实际的数据库。我编了一些示例表,就是为了问这个问题。我只是好奇,因为我以前遇到过这个问题。您会惊讶地发现,编写SQL DML(“查询”)的困难往往是由于SQL DDL(“表设计”)不好造成的。SQLDDL中使用的数据元素名称可以揭示设计者的意图。因此,给我们一个机会,发布实际的模式:)否则,模式可能是好的,而是你的回忆是错误的;)