gpt4 book ai didi

mysql根据第三个表的id创建两个表的 View

转载 作者:行者123 更新时间:2023-11-29 06:55:52 25 4
gpt4 key购买 nike

我发现了很多关于根据第三个表的 id 合并两个表的类似帖子,但我似乎无法弄清楚其中的逻辑。

给予 三个表

表A

| uuid |  ttl  |  ord |
-----------------------
| alpha| Alp | 1|
| beta| Bet | 2|
| gamma| Gam | 3|

表B

| uuid |  ttl  |  ord | tab_A_ref
--------------------------------
| joe | Jo | 1| alpha
| mike | Mi | 2| beta
| peter| Pe | 3| alpha
| alan | Pe | 4| beta
| tom | Pe | 5| gamma

表C

| uuid |  ttl  |  ord | tab_A_ref
--------------------------------
| jane | Ja | 1| alpha
| marg | Ma | 2| beta
| phobe | Ph | 3| alpha
| anon | An | 4| beta
| toni | To | 5| gamma

我正在寻找创建一个 View myView 其中 tab_A_ref = alpha 或 beta

| uuid  |  ttl  | ord | tab_A_ref
| joe | Jo | 1| alpha
| peter | Pe | 3| alpha
| jane | Ja | 1| alpha
| phobe | Ph | 3| alpha
| mike | Mi | 2| beta
| alan | Pe | 4| beta
| marg | Ma | 2| beta
| anon | An | 4| beta

使用基本连接,

SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref
FROM tableB
INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid

我扩展了逻辑以合并两者

SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref,
tableC.uuid, tableC.ttl, tableC.ord, tableC.tab_A_ref,
FROM
tableB INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid,
tableC INNER JOIN tableA on tableC.tab_A_ref = tableA.uuid

但这会生成错误not unique table/alias: tableA

从其他帖子看来,我应该有一个嵌套的括号 JOIN,在尝试了多种组合后都失败了。那么如何格式化第二个JOIN

最佳答案

所有表(临时表、子查询、物理表或其他表)必须在查询中唯一命名。

否则数据库引擎不知道您引用的是哪个数据源。

您的原创:

SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref,
tableC.uuid, tableC.ttl, tableC.ord, tableC.tab_A_ref,
FROM
tableB INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid,
tableC INNER JOIN tableA on tableC.tab_A_ref = tableA.uuid

在上面,查询引擎如何知道要使用哪个tableA?你已经声明两次了。请记住,您正在应用过滤器(ON tableB.tab_A_ref = tableA.uuid) - 因此您有两个结果集(一个来自第一个连接,另一个与第二个连接不同),并且它们都称为tableA

简单地,使用别名(AS)来唯一引用所有表(连接或其他方式):

SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref,
tableC.uuid, tableC.ttl, tableC.ord, tableC.tab_A_ref,
FROM
tableB INNER JOIN tableA AS a_ref ON tableB.tab_A_ref = a_ref.uuid,
tableC INNER JOIN tableA AS b_ref ON tableC.tab_A_ref = b_ref.uuid

关于mysql根据第三个表的id创建两个表的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45676413/

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