Mysql 具有指向同一表的2 FK的表
我使用MyISAM引擎的MySQL。假设我有以下两个数据库表: 表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
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引用的所有行,如果缺少任何行,它将不会为该特定行生成任何结果。
谢谢大家。我的错误是我没有使用别名。。。现在觉得自己很愚蠢。。。谢谢大家。