如何加入3个关系表

时间:2010-12-23 14:23:25

标签: mysql join relational-database

如何使用结构连接3个关系表:

t1 | id
t2 | id | rating
t3 | source_id | relation

t3存储t1和t2使用两者的字段的数据。所以source_id字段可以是t1的id或t2的id。

input  : t1 id
output : t2 rating

一个例子:

**t1**

id |
---------
42 |

**t2**

id | rating  
-------------
37 | 9.2

**t3**

id | source_id
--------------
42 | 1
37 | 1
26 | 2
23 | 1

我想要的是获得带有42输入的9.2输出。

你能在一个SQL查询中做到吗?

3 个答案:

答案 0 :(得分:3)

你的“关系表”是一场灾难; SQL代码(SQL旨在导航关系数据库)所需的将是另一个disater,永远不会完整或稳定。编码问题是相应的二阶问题,它可以识别第一顺序中的错误。

首先,准确地为您放置的关系DBMS规范化数据并为其建模;这样你就可以使用SQL关系语言了。然后代码将简单,容易,直接和完整。

如果你想让我对数据建模,那很好。但我需要的信息比神秘的Id列更多;我需要实体和列的名称,它们的含义,它们实际上是如何相互关联的。

回复评论

是的,您当然可以拥有一个引用多个父表的外键列。但你不能(在关系数据库中)有一个 一个另一个父表的列:这将导致孤儿,spinsters和各种容易避免的编码恐怖。

答案 1 :(得分:2)

此查询将为您提供所需的数据输出,但不要认为它在您的模型中是正确的:

SELECT  t2.rating
FROM    t1
JOIN    t3 t31
ON      t31.id = t1.id
JOIN    t3 t32
ON      t32.source_id = t31.source_id
JOIN    t2
ON      t2.id = t32.id
WHERE   t1.id = 42

答案 2 :(得分:1)

我找到了解决方案,您怎么看?

SELECT t2.rating
FROM t3 AS t3
inner join t1 AS t1 on t1.id = t3.id
inner join (SELECT source_id, rating
FROM t3 AS t32
inner join t2 AS review on t2.id = t32.id) as second on second.source_id = t3.source_id
where t1.id = 42 limit 0,1