我使用MySQL和MyISAM引擎。假设我有以下2个数据库表:
TableX
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
下面是一个执行JOIN操作以从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
关键字,将"外部"联接操作替换为"内部"联接。