0

Web ページの URL とそれらの接続 (ハイパーリンク) をそれぞれ格納するページとハイパーリンクの 2 つのテーブルがあります。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

hyperlink_id を指定すると、a.com と b.com の 2 つの文字列を連続して返す 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、この条件を満たす行がテーブルに 1 つしかないことを意味します。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

これにより、テーブルに 2 回アクセスして、2 つの異なるIDPageに必要な情報を取得します。

于 2012-08-12T12:09:59.930 に答える