[英]how to join 3 relational tables
如何使用結構連接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查詢中做到這一點嗎?
您的“關系表”是一場災難; 所需的SQL代碼(SQL旨在導航關系數據庫)將是一個進一步的災難,永遠不會完整或不穩定。 編碼問題是相應的二階問題,可識別一階錯誤。
首先,為放置在其中的Relational DBMS准確地規范化數據並建模。 以便您可以使用SQL關系語言。 然后,代碼將變得簡單,簡單,簡單而完整。
如果要我對數據建模,可以。 但是我需要更多信息,而不是神秘的Id
列; 我需要實體和列的名稱,它們的含義以及它們之間的實際聯系方式。
對評論的回應
是的,您當然可以有一列作為外鍵引用多個父表的列。 但是,您不能(在關系數據庫中)擁有一個作為一個或另一個父表的列:這將導致孤兒,蜘蛛人和各種容易避免的編碼恐怖。
該查詢將為您提供所需的數據輸出,盡管您認為模型中的輸出不正確:
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
我找到了解決方案,您怎么看?
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.