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

艺术范德莱

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

给三张桌子

tableA

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

tableB

| 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

tableC

| 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

我期待创建一个视图myView,其中tab_A_ref = alpha or 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

从其他帖子看来,我应该有一个嵌套的bracketedJOIN,尝试了多种组合都失败了。那么如何格式化第二个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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据第三个表的数据连接两个表

比较两个工作表以创建第三个工作表

MySQL将来自两个不同表的ID依赖字段插入第三个表

MySQL DATABASE - 使用第三个表连接两个表的 SQL 语句

MYSQL根据第三个表中的关系连接两个表并连接第二个表中的数据

如何连接两个表(均从自连接派生)以创建第三个表?

如何从两个表中获取ID列表并在我的SQL中传递第三个表

MySQL根据第三个查询的结果运行两个sql查询之一

如何从由第三个表连接的两个mySQL表中选择数据?

MySql从两个表中多次选择并将它们的结果连接到第三个表

在MySQL的第三个表中添加WHERE子句,其ID在前两个内部联接表中存在

当连接三个表时,MySQL不返回任何内容。两个表在第三个表中具有外键。怎么了?

使用INNER JOIN将两个表合并为第三个表

选择表单-在第三个表中链接两个表

将两个表中的值插入第三个表中

连接两个表+第三个表作为条件列

连接以第三个表为条件的两个表

从其他两个表更新第三个表

如何连接两个表并按第三个表排序?

计算从两个表关联到第三个表的行

如何从两个相关表中获取数据并放入第三个表

按第三个表的条件过滤的两个表的分组计数查询

使用第三个表连接两个表

显示两个表的输出,但通过第三个表进行匹配

使用第三个表(SQL)连接两个表

使用两个表中的条目从第三个表中选择数据

根据应用于两个数据框的条件创建第三个数据框

通过映射第三个表查询联接两个表,而无需从Oracle中的第三个表返回所有记录

使用两个输出列通过SELECT创建第三个输出列