2012-08-12 204 views
0

我有兩個表,分別用於存儲網頁URL及其連接(超鏈接)的頁和超鏈接。在Page表中,我有一個對所有唯一條目都是AUTO_INCREMENT的page_id列。在超鏈接表中,我使用page_id作爲超鏈接的源和目標。從兩個連接的表中選擇一個表中的一列由另一個表中的兩個引用

表:頁

page_id | page_url 
-------------------- 
    1  | a.com 
    2  | b.com 
    3  | c.com 
    4  | d.com 

表:超鏈接

hyperlink_id | source_id | destination_id 
1   | 1   | 2 
2   | 1   | 3 
3   | 2   | 4 
4   | 4   | 4 

我希望檢索返回我在一排,a.com和b.com兩個字符串一個結果,給出的hyperlink_id 。假設hyperlink_id是1.

我試過使用下面的查詢,但它似乎沒有工作。

SELECT Page.page_url, Page.page_url from Hyperlink 
JOIN Page 
ON Page.page_id = Hyperlink.source_id 
AND Page.page_id = Hyperlink.destination_id 
where Hyperlink.hyperlink_id = 1 

該查詢返回給我一個空的ResultSet。

但是,此查詢適用於hyperlink_id = 4.我認爲此查詢在source_id != destination_id時不起作用。我的SELECT語句有什麼問題?

回答

3

你的查詢可以被改寫爲:

SELECT Page.page_url, Page.page_url 
    FROM Hyperlink 
    JOIN Page 
    ON Page.page_id = Hyperlink.source_id 
    AND Hyperlink.source_id = Hyperlink.destination_id 
WHERE Hyperlink.hyperlink_id = 1 

這意味着Hyperlink.source_id必須等於Hyperlink.destination_id,你只需要在你的表中的一行的滿足此條件。其中一個在那裏hyperlink_id = 4

也許你的意思是下面的意思?

SELECT p1.page_url, p2.page_url 
    FROM Hyperlink 
    JOIN Page p1 
    ON p1.page_id = Hyperlink.source_id 
    JOIN Page p2 
    AND p2.page_id = Hyperlink.destination_id 
WHERE Hyperlink.hyperlink_id = 1 

這將訪問Page表兩次,以獲得您所需要兩個不同標識

+0

嗨的信息,謝謝您的回答。我想顯示所有超鏈接的所有page_url,而不僅僅是source = destination的那些。 – paperclip 2012-08-12 12:12:26

+1

在你的編輯中,它說在第一行的Page1.page_url,應該是p1呢? – paperclip 2012-08-12 12:14:23

+0

確實,對不起。 – Ben 2012-08-12 12:15:07

相關問題