Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用空FKs多次连接一个表_Sql_Database - Fatal编程技术网

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)
  • 球员(身份证、性别)
我想选择所有的游戏和玩家的性别,我如何绕过空玩家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或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中使用的数据元素名称可以揭示设计者的意图。因此,给我们一个机会,发布实际的模式:)否则,模式可能是好的,而是你的回忆是错误的;)