Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Mysql 具有指向同一表的2 FK的表_Mysql_Database - Fatal编程技术网

Mysql 具有指向同一表的2 FK的表

Mysql 具有指向同一表的2 FK的表,mysql,database,Mysql,Database,我使用MyISAM引擎的MySQL。假设我有以下两个数据库表: 表 ID, Person1ID, Person2ID 人 ID, Name 既然我有两个外键指向同一个表,那么我的查询应该是什么样子? 我一直在尝试加入表格,但运气不好 我想选择 ID, Name, Name 在您的情况下,需要两次加入Person表,下面是一个示例: SELECT j.ID, p.Name AS `Person 1 Name`, p2.Name AS `Person 2 Name

我使用MyISAM引擎的MySQL。假设我有以下两个数据库表:

ID, Person1ID, Person2ID

ID, Name
既然我有两个外键指向同一个表,那么我的查询应该是什么样子? 我一直在尝试加入表格,但运气不好

我想选择

ID, Name, Name

在您的情况下,需要两次加入
Person
表,下面是一个示例:

SELECT j.ID, 
       p.Name AS `Person 1 Name`,
       p2.Name AS `Person 2 Name`
  FROM TableX j
  JOIN Person p
    ON p.ID = j.Person1ID
  JOIN Person p2
    ON p2.ID = j.Person2ID

在您的情况下,需要两次加入
Person
表,下面是一个示例:

SELECT j.ID, 
       p.Name AS `Person 1 Name`,
       p2.Name AS `Person 2 Name`
  FROM TableX j
  JOIN Person p
    ON p.ID = j.Person1ID
  JOIN Person p2
    ON p2.ID = j.Person2ID

以下是执行联接操作以从Person表检索相关行的查询示例:

SELECT t.ID
     , t.Person1ID
     , t.Person2ID
     , p1.ID          AS `p1_ID`
     , p1.Name        AS `p1_Name`
     , p2.ID          AS `p2_ID`
     , p2.Name        AS `p2_Name`
 FROM TableX t
 LEFT
 JOIN Person p1 
   ON p1.ID = t.Person1ID
 LEFT
 JOIN Person p2
   ON p2.ID = t.Person2ID
ORDER BY t.ID

如果要排除Person表中没有匹配行的行,可以删除
LEFT
关键字,将“外部”联接操作替换为“内部”联接操作。

以下是执行联接操作以从Person表检索相关行的查询示例:

SELECT t.ID
     , t.Person1ID
     , t.Person2ID
     , p1.ID          AS `p1_ID`
     , p1.Name        AS `p1_Name`
     , p2.ID          AS `p2_ID`
     , p2.Name        AS `p2_Name`
 FROM TableX t
 LEFT
 JOIN Person p1 
   ON p1.ID = t.Person1ID
 LEFT
 JOIN Person p2
   ON p2.ID = t.Person2ID
ORDER BY t.ID

如果要排除Person表中没有匹配行的行,可以删除
LEFT
关键字以将“外部”联接操作替换为“内部”联接。

+1。这是返回指定结果的查询的一个很好的示例。(最好注意,如果在Person表中找不到匹配行,则不会返回TableX中的行;实现“外部”联接将允许返回TableX中的行,当找不到匹配行时,还将返回Name的空值。)稍微好一点的措辞是
它将返回表Person中两个id引用的所有行,如果缺少任何行,它将不会为该特定行生成任何结果。
谢谢大家。我的错误是我没有使用别名。。。现在觉得自己很愚蠢。。。谢谢大家。这是返回指定结果的查询的一个很好的示例。(最好注意,如果在Person表中找不到匹配行,则不会返回TableX中的行;实现“外部”联接将允许返回TableX中的行,当找不到匹配行时,还将返回Name的空值。)稍微好一点的措辞是
它将返回表Person中两个id引用的所有行,如果缺少任何行,它将不会为该特定行生成任何结果。
谢谢大家。我的错误是我没有使用别名。。。现在觉得自己很愚蠢。。。谢谢大家。