我有两张桌子:
一个表是存储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个表。我需要从表*中提取数据,但我首先需要tableLocation。 tableB有pageTitle。我需要加入这两个表来获取数据。
答案 0 :(得分:3)
(SELECT tableLocation
FROM pageCatalog
WHERE pageName='PAGENAME') AS d
我没有看到名为pageID
的列,但您引用了d.pageID
你的意思是这样做:
(SELECT pageID
FROM pageCatalog
WHERE pageName='PAGENAME') AS d
答案 1 :(得分:2)
在内部SELECT中,您只选择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'
答案 2 :(得分:1)
没有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'
答案 3 :(得分:1)
您的子查询中没有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'
答案 4 :(得分:1)
您的子选择别名d
不包含pageID
。
尝试将其更改为:
INNER JOIN
(SELECT tableLocation, pageID
FROM pageCatalog
WHERE pageName='PAGENAME') d
ON (p.pageID = d.pageID)
答案 5 :(得分:1)
你有 -
(SELECT tableLocation FROM pageCatalog WHERE pageName='PAGENAME') d
然后
ON (p.pageID = d.pageID)
此时d
表格仅包含列tableLocation
。
答案 6 :(得分:1)
您没有从子查询中选择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';
答案 7 :(得分:0)
我刚刚做了两个查询语句。首先将tableLocation存储为变量,第二个查询将第二个SELECT替换为变量。我想避免两个查询,但没有找到方法。