(奖金互联网络的人谁可以解释我如何在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