如何用一个代码连接多个表? [关闭]

Posted

技术标签:

【中文标题】如何用一个代码连接多个表? [关闭]【英文标题】:How to join several tables with a single code? [closed] 【发布时间】:2021-12-04 12:02:39 【问题描述】:

我正在尝试将所有不同的表连接到主表,但在尝试时出现错误。 表是

员工:

EMPLOYEEID | etc...

就业地区:

EMPLOYEEID | TERRITORYID

领土:

TERRITORYID | REGIONID

地区:

REGIONID | REGIONDESCRIPTION

我从类似案例的解决方案中尝试了几个代码。但他们没有工作。我试过的代码是

SELECT EMPLOYEETERRITORIES.EMPLOYEEID, TERRITORIES.TERRITORYID, REGION.REGIONID, EMPLOYEES.EMPLOYEEID FROM EMPLOYEES
INNER JOIN EMPLOYEETERRITORIES ON EMPLOYEES.EMPLOYEEID = EMPLOYEETERRITORIES.EMPLOYEEID 
INNER JOIN TERRITORIES ON EMPLOYEES.TERRITORYID = TERRITORIES.TERRITORYID 
INNER JOIN REGION ON EMPLOYEES.REGIONID = REGION.REGIONID;

这个和

SELECT * FROM EMPLOYEES
INNER JOIN EMPLOYEETERRITORIES ON EMPLOYEES.EMPLOYEEID = EMPLOYEETERRITORIES.EMPLOYEEID
INNER JOIN TERRITORIES ON EMPLOYEES.TERRITORYID = TERRITORIES.TERRITORYID
INNER JOIN REGION ON EMPLOYEES.REGIONID = REGION.REGIONID;

错误是“EMPLOYEES”。“TERRITORYID”:标识符无效。 好像第一个 Inner join 没有加入 employees 表。

【问题讨论】:

那些错误是什么?请edit问题添加该信息。 But they didn't go through well - 你能更具体一点吗?什么是预期的,你得到了什么? 1) 请为您正在使用的数据库引擎添加标签,例如SQL Server,或 Oracle,或其他任何东西。 2) “EMPLOYEES”表是否有“TERRITORYID”列? @RickyLee 使用 JOIN 时不会在表中组成新列。 (或其他任何事情。) 如果它正确加入它,它不会改变它所在的表,所以你不能在它前面加上EMPLOYEES.来引用它。它不在 EMPLOYEES 表中。您是否尝试过学习 SQL 教程? 【参考方案1】:

根据您自己的问题,EMPLOYEES.TERRITORYID 不存在,但 EMPLOYTERRITORIES.TERRITORYID 存在

当您指定 EMPLOYEES.TERRITORYID 时,DBMS 不会尝试返回您的代码并推断 是如何包含该列的。指定 EMPLOYEES.TERRITORYID 是您明确表明 DBMS 应该在表中查找 EMPLOYEES 并查找列 TERRITORYID

查看您自己的SELECT 子句。您不会尝试在那里选择 EMPLOYEES.TERRITORYID,那么您为什么希望它在 JOIN 子句中起作用?

那么,参考 actual 表中的列actually

SELECT EMPLOYEETERRITORIES.EMPLOYEEID, TERRITORIES.TERRITORYID, REGION.REGIONID, EMPLOYEES.EMPLOYEEID
FROM EMPLOYEES
INNER JOIN EMPLOYEETERRITORIES ON EMPLOYEES.EMPLOYEEID = EMPLOYEETERRITORIES.EMPLOYEEID 
INNER JOIN TERRITORIES ON EMPLOYEETERRITORIES.TERRITORYID = TERRITORIES.TERRITORYID 
--------------------------^^^^^^^^^^^^^^^^^^^
INNER JOIN REGION ON TERRITORIES.REGIONID = REGION.REGIONID;
---------------------^^^^^^^^^^^

【讨论】:

带有表别名(相关名称)的列指的是上一个子句(包括 JOIN)的结果表中的列,而不是输入表的列,即使有一个输出列具有相同的每个输入列的名称。所以这个措辞不好。您可以争辩说,在 ON 中,别名可以被认为是指在循环遍历两个表时正在检查的 2 个输入元组,但在 JOIN ON 完成后该视图会中断。

以上是关于如何用一个代码连接多个表? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Arel:如何用 OR 干净地连接多个条件?

如何用java实现ftp客户端程序

oracle 中多表连接如何用

如何用adb连接android手机

如何用adb连接android手机

已经建立了两个表,请问如何用SQL语句建立关联?