Mysql 多重联合
(任何人都可以通过奖励互联网来解释我如何在SQL和SQLAlchemy中做到这一点。) 我有三张这样的桌子:Mysql 多重联合,mysql,sql,union,Mysql,Sql,Union,(任何人都可以通过奖励互联网来解释我如何在SQL和SQLAlchemy中做到这一点。) 我有三张这样的桌子: **Bottom:** id name middle_id **Middle:** id name top_id **Top:** id name 每个底部有一个中间,每个中间有一个顶部。我想对数据库进行搜索,这样当用户在查询中键入时,它将搜索底部、中间和顶部。如果有人搜索恰好位于顶部的项目,它将通过中间返回所有与顶部相关的底部。* 以下是一个在两个级别上工作的查询: SELECT
**Bottom:**
id
name
middle_id
**Middle:**
id
name
top_id
**Top:**
id
name
每个底部有一个中间,每个中间有一个顶部。我想对数据库进行搜索,这样当用户在查询中键入时,它将搜索底部、中间和顶部。如果有人搜索恰好位于顶部的项目,它将通过中间返回所有与顶部相关的底部。*
以下是一个在两个级别上工作的查询:
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%'
如何扩展它,使其也可以搜索Top WHERE Top.name(如“%query%”),但它不会返回Middle.*,而是返回Bottom.*?下面是一些不起作用的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%'
换句话说,如果我在底部有一个条目与中间的条目相关,而中间的条目与顶部的条目相关,如果我在顶部搜索合适的名称,它将返回与它相关的中间条目,而不是与它相关的中间条目
以下是一个例子:
数据:
如果我搜索“沃尔特·怀特”,它将不会返回中间关系(杰西·平克曼),而是返回中间关系结果的底层关系(格斯·弗林)
这个问题已经困扰了我一段时间了,我真的非常感谢任何帮助。提前感谢!:) 试试这个
select
b.id,
b.name,
b.middle_id,
m.top_id,
m.name,
t.name
from bottom as b
left join (select id,`name`, top_id from Middle) as m on m.id = b.middle_id
left join (select id,`name`from Top) as t on t.id = m.top_id
试试这个
select
b.id,
b.name,
b.middle_id,
m.top_id,
m.name,
t.name
from bottom as b
left join (select id,`name`, top_id from Middle) as m on m.id = b.middle_id
left join (select id,`name`from Top) as t on t.id = m.top_id
我认为你应该使用左连接。 您要做的是联接所有表,然后搜索值 让我为您提供一些代码:
SELECT
bottom.name,
middle.name,
top.name
FROM
bottom
LEFT JOIN middle ON top.id = middle.id
LEFT JOIN top ON middle.id = top.id
WHERE
middle.name LIKE '%name%'
OR top.name LIKE '%name%'
OR bottom.name LIKE '%name%'
我认为你应该使用左连接。 您要做的是联接所有表,然后搜索值 让我为您提供一些代码:
SELECT
bottom.name,
middle.name,
top.name
FROM
bottom
LEFT JOIN middle ON top.id = middle.id
LEFT JOIN top ON middle.id = top.id
WHERE
middle.name LIKE '%name%'
OR top.name LIKE '%name%'
OR bottom.name LIKE '%name%'
非常感谢。这非常有效:)。现在我需要弄清楚如何将此转换到SQLAlchemy。谢谢!这非常有效:)。现在我需要弄清楚如何将此转换到SQLAlchemy。谢谢!我想拉希尔刚刚击败了你,但这同样有效。我希望我能挑两个正确的答案。谢谢!我想拉希尔刚刚击败了你,但这同样有效。我希望我能挑两个正确的答案。