(獎金互聯網絡的人誰可以解釋我如何在SQL和SQLAlchemy的做到這一點。)MySQL的 - 多個聯盟
我有三個表設置像這樣:
**Bottom:**
id
name
middle_id
**Middle:**
id
name
top_id
**Top:**
id
name
每底部有一箇中間,每個中間都有一個頂部。我想對數據庫進行搜索,以便當用戶鍵入查詢時,它將搜索Bottom,Middle和Top。如果有人搜索恰好位於頂部的項目,它將通過中間返回與頂部相關的所有底部*。
這裏有兩個層面的工作查詢:
SELECT *
FROM Bottom
WHERE name LIKE '%query%'
UNION
SELECT Bottom.*
FROM Middle JOIN Bottom ON Bottom.middle_id = Middle.id
WHERE Middle.name LIKE '%query%'
如何擴展這使得它也可以搜索熱門WHERE Top.name LIKE「%查詢%」,但而不是返回中東* ,它返回底部。*?下面是一些SQL不工作,但我想解釋什麼,我想要實現:
SELECT *
FROM Bottom
WHERE name LIKE '%query%'
UNION
SELECT Bottom.*
FROM Middle JOIN Bottom ON Bottom.middle_id = Middle.id
WHERE Middle.name LIKE '%query%'
UNION
SELECT Bottom.*
FROM Top JOIN Middle ON Middle.top_id = Top.id
WHERE Top.name LIKE '%query%'
換句話說,如果我有一個與在中東的條目底部的條目,並Middle中的條目與Top中的條目相關,如果我搜索Top作爲合適的名稱,它將不返回與其相關的中間條目,而是返回與相關中間條目相關的Bottom條目。
下面是一個例子:
數據:
**Bottom**
id 1
name Gus Fring
middle_id 1
**Middle**
id 1
name Jesse Pinkman
top_id 1
**Top**
id 1
name Walter White
如果我搜索「沃爾特·白」將返回不中東關係(傑西Pinkman),而是底部關係對中東關係的結果(Gus Fring)。
這個問題一直困擾我一會兒,我非常感謝任何幫助。提前致謝! :)
謝謝!這工作完美:)。現在我需要弄清楚如何將這個轉換爲SQLAlchemy。 – user1492385