簡體   English   中英

如何聯接3個關系表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM