繁体   English   中英

SELECT状态的SQL INNER JOIN引发错误

[英]Sql INNER JOIN with SELECT state is throwing an error

我有两个表:

一个表是一个“目录”,它存储一个pageID,tableLocation和一个pageName。

tableLocation是该页面内容的存储位置(无论如何,我在一个站点中有多个区域)。

我需要从“ tableLocation”中获取数据,所以我想做一个JOIN,以便可以获取目录和所需表所需的所有数据。 当然,如果没有“ tableLocation”数据,我不知道要查找哪个表。 我正在尝试使用以下SQL语句:

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation 
 FROM pageCatalog 
 WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME'

我收到错误消息“无效的列名'pageID'”

如果我用特定的tableLocation替换第二个SELECT,它将起作用。 所以错误是“ INNER JOIN(SELECT ...)”引起的,但是我不确定是什么问题。

-------------编辑----------更多详细信息:

例如pageCatalog有这个

    pageID  tableLocation   pageName
    167     tableA          page1
    12      tableB          page2
    250     tableC          page3

在此示例中,我有3个表。 我需要从table *中提取数据,但首先需要tableLocation。 tableB具有pageTitle。 我需要将两个表连接起来以获取该数据。

(SELECT tableLocation 
 FROM pageCatalog 
 WHERE pageName='PAGENAME') AS d

我没有看到一个名为列pageID ,但你参考d.pageID

您是要这样做吗?

(SELECT pageID 
 FROM pageCatalog 
 WHERE pageName='PAGENAME') AS d

在你内心的选择只能选择tableLocation列,但你尝试指pageIDd.pageID 尝试将该列添加到内部SELECT中:

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID
 FROM pageCatalog 
 WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME'

没有d.pageID 别名为d子查询只有一列tableLocation 对其进行修改,如下所示:

SELECT p.pageID,p.tableLocation,p.pageName  
FROM pageCatalog p  
INNER JOIN  
(SELECT pageID, tableLocation 
 FROM pageCatalog  
 WHERE pageName='PAGENAME') d  
ON (p.pageID = d.pageID)  
WHERE p.pageName='PAGENAME' 

您的子查询中没有pageID 更改为此:

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID 
 FROM pageCatalog 
 WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME'

别名为d选择不包含pageID

尝试将其更改为:

INNER JOIN 
(SELECT tableLocation, pageID 
 FROM pageCatalog 
 WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 

你有 -

(SELECT tableLocation FROM pageCatalog WHERE pageName='PAGENAME') d

然后

ON (p.pageID = d.pageID) 

d表此时将仅包含列tableLocation

您不是从子查询中选择pageID。 尝试这个:

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID
 FROM pageCatalog 
 WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME'

或者更好的是,根本不使用子查询:

SELECT p.pageID, p.tableLocation, p.pageName 
FROM pageCatalog p 
INNER JOIN pageCatalog d
ON p.pageID = d.pageID
WHERE p.pageName='PAGENAME'
AND d.pageName = 'PAGENAME';

我只是做了两个查询语句。 首先将tableLocation存储为变量,第二个查询用该变量替换第二个SELECT。 我想避免两个查询,但没有找到解决方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM