gpt4 book ai didi

MySQL - 多重联合

转载 作者:行者123 更新时间:2023-12-01 00:55:27 26 4
gpt4 key购买 nike

(任何可以解释我如何在 SQL 和 SQLAlchemy 中执行此操作的人都可以获得奖励互联网。)

我设置了三个表,如下所示:

**Bottom:**
id
name
middle_id

**Middle:**
id
name
top_id

**Top:**
id
name

每个底部都有一个中间,每个中间都有一个顶部。我想对数据库进行搜索,以便当用户输入他们的查询时,它将搜索底部、中间和顶部。如果有人搜索恰好位于 Top 的项目,它将通过 Middle 返回所有与 Top 相关的 Bottom.*。

这是一个在两个层面上工作的查询:

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 LIKE '%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%'

换句话说,如果我在 Bottom 中有一个条目与 Middle 中的条目相关,并且 Middle 中的那个条目与 Top 中的条目相关,如果我在 Top 中搜索适当的名称,它将返回不是与之相关的中间条目,但与相关中间条目相关的底部条目。

这是一个例子:

数据:

**Bottom**
id 1
name Gus Fring
middle_id 1

**Middle**
id 1
name Jesse Pinkman
top_id 1

**Top**
id 1
name Walter White

如果我搜索“Walter White”,它不会返回中间关系 (Jesse Pinkman),而是返回中间关系结果的底部关系 (Gus Fring)。

这个问题困扰了我一段时间,非常感谢任何帮助。提前致谢! :)

最佳答案

我认为您应该使用 LEFT JOINS。您要做的是连接所有表,然后搜索值。

让我为您提供一些代码:

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%'

关于MySQL - 多重联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com