2011-11-29 46 views
1

我有兩個表:的Sql INNER JOIN與SELECT狀態拋出一個錯誤

一個表是「目錄」是存儲的pageID,tableLocation和頁面名稱。

tableLocation是存儲該頁面的內容的地方(我有多個站點的區域......無論如何)。

我需要從「tableLocation」中獲取數據,所以我想要做一個JOIN,這樣我就可以獲得目錄和所需表格所需的所有數據。當然,如果沒有「tableLocation」數據,我不知道要查看哪個表。我嘗試使用下面的SQL語句:如果我替換它的工作原理具體tableLocation第二選擇

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'」

。所以錯誤是用「INNER JOIN(SELECT ...」),但我不確定是什麼問題。有什麼想法嗎?

-------------編輯--- ------- 更多細節:

例如pageCatalog有這個

pageID tableLocation pageName 
    167  tableA   page1 
    12  tableB   page2 
    250  tableC   page3 
在這個例子中

我有3個表,我需要從表*拉數據,但我首先需要tableLocation。 tableB有pageTitle,我需要加入兩張表才能得到這些數據。

+0

我知道我已經通過p.tableLocation獲取「tableLocation」。我嘗試使用別名作爲表名,但拋出了其他錯誤。 – dcp3450

+1

從它看起來像你試圖加入一個表本身,這是正確的嗎?你想通過這樣做完成什麼?此外,您收到無效列名稱錯誤的原因很可能是因爲您沒有在子查詢中選擇pageID列。 –

+1

謝謝安德斯。對不起,格式化。 – dcp3450

回答

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

我沒有看到一個名爲pageID列,但您引用d.pageID

您是不是要找這樣做:

(SELECT pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') AS d 
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' 
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' 
2

在你內心的選擇,你只能選擇tableLocation列,但隨後試圖引用一個pageIDd.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' 
1

你再選擇別名爲d不包含pageID

嘗試改變,爲:

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

你 -

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

然後

ON (p.pageID = d.pageID) 

d表將只包含列tableLocation在這一點上。

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'; 
0

我只是做了兩個查詢語句。首先將tableLocation存儲爲變量,第二個查詢將第二個SELECT替換爲變量。我想避免兩個查詢,但沒有看到方法。