我有两个表,页面和超链接,分别存储网页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
我想检索一个结果集,该结果集在给定hyperlink_id的情况下连续返回两个字符串,a.com 和 b.com。假设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
此查询向我返回了一个空的结果集。
但是,此查询适用于 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 所需的信息