带有 INNER JOIN 和 WHERE 的 SQL 查询

Posted

技术标签:

【中文标题】带有 INNER JOIN 和 WHERE 的 SQL 查询【英文标题】:SQL query with INNER JOIN and WHERE 【发布时间】:2013-08-21 12:50:07 【问题描述】:

尝试在查询中获取特定值时收到以下消息

"指定的字段可以引用多个表"

很明显,我正在尝试搜索多个表中存在的内容,但是如何正确执行此操作?

现在我有以下代码:

SELECT Table1.CustomerId, Table1.Address, 
       Table2.CustomerId, Table2.Telephone, 
       Table3.CustomerId, Table3.Notes
FROM (Table1 INNER JOIN Table2 ON Table1.CustomerId=TAble2.CustomerId) 
      INNER JOIN Table3 ON Table2.CustomerId=Table3.CustomerId
WHERE CustomerId = 0015

最后一句话是问题...有什么想法吗?

【问题讨论】:

【参考方案1】:

错误信息非常清楚,WHERE 子句WHERE CustomerId = 0015 中的字段CustomerId 出现在两个表中。您必须确定要从哪个表中使用它; table1 还是 table2?例如:

SELECT Table1.CustomerId, Table1.Address, 
       Table2.CustomerId, Table2.Telephone, 
       Table3.CustomerId, Table3.Notes
FROM (Table1 INNER JOIN Table2 ON Table1.CustomerId=TAble2.CustomerId) 
      INNER JOIN Table3 ON Table2.CustomerId=Table3.CustomerId
WHERE table1.CustomerId = 0015

【讨论】:

【参考方案2】:

您应该在 WHERE 语句中指出 CustomerId 是哪个表

SELECT Table1.CustomerId, Table1.Address, 
       Table2.CustomerId, Table2.Telephone, 
       Table3.CustomerId, Table3.Notes
FROM (Table1 INNER JOIN Table2 ON Table1.CustomerId=TAble2.CustomerId) 
      INNER JOIN Table3 ON Table2.CustomerId=Table3.CustomerId
WHERE Table1.CustomerId = 0015

【讨论】:

【参考方案3】:

您需要从需要 customerId 的表中初始化。

SELECT Table1.CustomerId, Table1.Address, 
       Table2.CustomerId, Table2.Telephone, 
       Table3.CustomerId, Table3.Notes
FROM (Table1 INNER JOIN Table2 ON Table1.CustomerId=TAble2.CustomerId) 
      INNER JOIN Table3 ON Table2.CustomerId=Table3.CustomerId
WHERE table1.CustomerId = 0015

【讨论】:

以上是关于带有 INNER JOIN 和 WHERE 的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用

带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式

INNER JOIN with WHERE lower(...) like ... 性能

Oracle中Inner join和Where的区别

Oracle中Inner join和Where的区别

INNER JOIN 和 WHERE 之间的区别?