如何使用结构连接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查询中做到吗?
答案 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