0
我使用MySQL和MyISAM引擎。比方说,我有以下2数据库表:带有2个FK的表指向同一个表
的TableX
ID, Person1ID, Person2ID
人
ID, Name
我的查询应该怎么样子,因为我有2个外键指向同一个表? 我一直在试图加入表,但运气不好......
我想选择
ID, Name, Name
我使用MySQL和MyISAM引擎。比方说,我有以下2数据库表:带有2个FK的表指向同一个表
的TableX
ID, Person1ID, Person2ID
人
ID, Name
我的查询应该怎么样子,因为我有2个外键指向同一个表? 我一直在试图加入表,但运气不好......
我想选择
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
关键字以用“内部”连接替换“外部”连接操作。
+1。这是返回指定结果的查询的一个很好的例子。 (如果在Person表中找不到匹配的行,可能会很好,如果在Person表中找不到匹配的行,则不会返回TableX中的行;实现“外部”连接将允许返回TableX中的行以及NULL值对于没有找到匹配行的名称) – spencer7593 2014-09-02 22:20:30
稍微好一点的措辞是'它将返回表中存在的所有行Person对于这两个id的引用,如果缺少它,它将不会产生该特定行的任何结果。 ' – Prix 2014-09-02 22:22:04
谢谢你们。我的错误是我没有使用Alias ......现在感觉很蠢......谢谢大家。 – BadgeWorker 2014-09-02 22:31:41