0

我有两个表,Page 和 Hyperlink,分别存储网页 URL 和它们的连接(超链接)。在 Page 表中,我有一个 page_id 列,它是所有唯一条目的 AUTO_INCREMENT。在超链接表中,我将 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

在给定超链接 ID 的情况下,我想检索一个连续返回两个字符串 a.com 和 b.com 的 ResultSet。假设 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 语句有什么问题?

4

1 回答 1

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表两次以获取两个不同ID所需的信息

于 2012-08-12T12:09:59.930 回答