如何用一个代码连接多个表? [关闭]
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 完成后该视图会中断。以上是关于如何用一个代码连接多个表? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章