2016-12-02 92 views
0

所以我找不到一个很好的方法来创建一个查询并获得我所需要的。我有两张桌子。带外键的SQL查询

1台

cure 
---- 
code (PK) 
name 

第二台

interaction 
------------ 
cure_code1 (FK) 
cure_code2 (FK) 
interaction 

我需要得到第一固化的名字,成为第二固化的名称和单行的相互作用交互表。

回答

0

可能被绊倒您的是,你必须加入到cure表两次,一次为每个外键:

SELECT 
    c1.name AS first_cure, 
    c2.name AS second_cure, 
    i.interaction 
FROM 
    interaction i 
JOIN 
    cure c1 ON i.cure_code1 = c1.code 
JOIN 
    cure c2 ON i.cure_code2 = c2.code 

在此查询中,我们加入到cure两次,但给每一个自己的别名(c1c2),以便列不明确。

如果您的应用程序可能有n治愈,那么您当前的表结构将无法正常工作。您需要第三张具有交互代码和固化代码的表格,以便您可以执行多对多映射。

+0

大声笑我试图做一个单一的加入,这比我预期的更容易,谢谢!是的,我不是那么愚蠢,完全理解你的查询:D – Tomek

+0

为什么它不起作用?应用程序将有一些治疗方法,但一种治疗方法只能对另一种治疗反应一次 – Tomek

+0

实际上,您可以使用一个连接来完成,但每个JOIN约束或IN语句都需要一个“OR”。这种方式只是更清洁的IMO。 –