3表JOIN - 使用两个唯一标识符从第三个标识符中提取不同的数据

时间:2014-04-16 16:42:18

标签: mysql sql

我有两个包含动态数据的表,它们都引用第三个静态表作为描述。想象一下这种情况:

Cake Table
Sponge Table
Description Table

海绵是一种蛋糕。海绵的每个实例都属于蛋糕的一个实例。基本上,Sponge有一个与之关联的Cake ID。

蛋糕的基本描述符合蛋糕的风格。这是一个简单的编号索引。即。蛋糕描述可能是25,而后者在描述表中等于“Soft,but Squeezable”。

Cake Table Rows有一个描述的索引。同样,Sponge也有它的描述索引 - 即使它与蛋糕的描述相同。

海绵属于描述ID 25的蛋糕 - 蛋糕是“柔软但又可挤压”;但海绵也有它自己的描述索引10 - “Almondy少咬一口!”。

我的问题是,如何从第三张表中提取两个描述?它可能很简单,但我已经在努力研究这个问题

到目前为止:

 SELECT 
    cakes.*,
    sponges.*, 
    descriptions.description as cake_description,
    descriptions.description as sponge_description
         from sponges
             join cakes on cake_id = sponge_id
         join descriptions on cake_desc_id = description_id

以上内容在两个描述字段中都复制了Sponge Description。基本上,我希望能够同时拉出Cake Description和Sponge Description。

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:5)

描述中的自我联接可以满足您的需求。如果有记录有一种描述,而不是另一种描述,则需要将其更改为左连接。

SELECT 
  cakes.*,
  sponges.*, 
  cake_description.description as cake_description,
  sponge_description.description as sponge_description
from sponges
join cakes on cake_id = sponge_id
join descriptions cake_description on cake_description.cake_desc_id = description_id
join descriptions sponge_description on sponge_description.cake_desc_id = description_id