Mysql 从两个联接表中进行选择,其中一个表的一列由另一个表的两列引用

Mysql 从两个联接表中进行选择,其中一个表的一列由另一个表的两列引用,mysql,sql,join,Mysql,Sql,Join,我有两个表,Page和Hyperlink分别存储网页URL及其连接(hyperlinks)。在页面表中,我有一个页面id列,它对所有唯一的条目都是自动递增的。在超链接表中,我使用页面id作为超链接的源和目标 表:第页 page_id | page_url -------------------- 1 | a.com 2 | b.com 3 | c.com 4 | d.com 表:超链接 hyperlink_id | source_i

我有两个表,Page和Hyperlink分别存储网页URL及其连接(hyperlinks)。在页面表中,我有一个页面id列,它对所有唯一的条目都是自动递增的。在超链接表中,我使用页面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。假设超链接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
此查询返回的结果集为空


但是,此查询适用于hyperlink_id=4。我认为当
source\u id!=目的地标识
。我的SELECT语句有什么问题?

您的查询可以重新编写为:

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\u id
必须等于
Hyperlink.destination\u id
,并且表中只有一行满足此条件。
hyperlink\u 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

这将访问
页面
表两次,以获取两个不同ID所需的信息

您的查询可以重新编写为:

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\u id
必须等于
Hyperlink.destination\u id
,并且表中只有一行满足此条件。
hyperlink\u 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

这将访问
页面
表两次,以获取两个不同ID所需的信息

您好,谢谢您的回答。我想显示所有超链接的所有页面url,而不仅仅是源=目的地的超链接。在编辑中,第一行是Page1.PageURL,应该是p1吗?嗨,谢谢你的回答。我想显示所有超链接的所有页面url,而不仅仅是源=目的地的超链接。在编辑中,第一行显示的是Page1.PageURL,应该改为p1吗?