[英]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
列,但你尝试指pageID
列d.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.