Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多重联合_Mysql_Sql_Union - Fatal编程技术网

Mysql 多重联合

Mysql 多重联合,mysql,sql,union,Mysql,Sql,Union,(任何人都可以通过奖励互联网来解释我如何在SQL和SQLAlchemy中做到这一点。) 我有三张这样的桌子: **Bottom:** id name middle_id **Middle:** id name top_id **Top:** id name 每个底部有一个中间,每个中间有一个顶部。我想对数据库进行搜索,这样当用户在查询中键入时,它将搜索底部、中间和顶部。如果有人搜索恰好位于顶部的项目,它将通过中间返回所有与顶部相关的底部。* 以下是一个在两个级别上工作的查询: SELECT

(任何人都可以通过奖励互联网来解释我如何在SQL和SQLAlchemy中做到这一点。)

我有三张这样的桌子:

**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。谢谢!我想拉希尔刚刚击败了你,但这同样有效。我希望我能挑两个正确的答案。谢谢!我想拉希尔刚刚击败了你,但这同样有效。我希望我能挑两个正确的答案。