繁体   English   中英

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

[英]Selecting from two joined tables where one column of a table is referred by two from the other one

我有两个表,页面和超链接,分别用于存储网页URL及其连接(超链接)。 在页面表中,我有一个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。 假设ultralink_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语句有什么问题?

您的查询可以重写为:

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所需的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM