需要有关mysql连接查询的帮助

时间:2010-12-20 07:34:37

标签: mysql join

我有一个存储书籍的BOOK表,以及一个存储任意两本书的相似度值的SIMI_BOOK表。以下是2个表格使用的密钥。

BOOK:bid btitle
SIMI_BOOK:bid1 bid2相似度

我需要一个可以获取有关OTHER书的所有信息的连接查询。

例如,当用户访问特定图书页面(bookA)时,它可以使用bid1 = bookA或bid2 = bookA获取SIMI_BOOK中的所有图书,然后分别使用BOOK加入bid2或bid1以获取有关该图书的信息。其他书。

关于如何实现这一点的任何想法?
提前谢谢。

3 个答案:

答案 0 :(得分:1)

你可以尝试类似的东西:

SELECT * (or what you need) 
FROM SIMI_BOOK JOIN BOOK ON (BOOK.bid = SIMI_BOOK.bid1)
WHERE SIMI_BOOK.bid2 = nnn (your primary book id)
UNION
SELECT * (or what you need) 
FROM SIMI_BOOK JOIN BOOK ON (BOOK.bid = SIMI_BOOK.bid2)
WHERE SIMI_BOOK.bid1 = nnn (your primary book id)

答案 1 :(得分:1)

怎么样:

SELECT b2.*
  FROM Book B2
  JOIN Simi_Book SB ON SB.Bid2 = B2.Bid AND SB.Bid1 = ?
UNION
SELECT b1.*
  FROM Book B1
  JOIN Simi_Book SB ON SB.Bid1 = B1.Bid AND SB.Bid2 = ?

两个查询中只有一个会返回一个值 - 除非您在Simi_Book表中有两个行(Bid1 = X,Bid2 = Y)和(Bid1 = Y,Bid2 = X)。 '?'占位符是您拥有的图书ID的值;相同的值应该提供两次。

答案 2 :(得分:0)

您需要LEFT JOINAS条款。

执行以下操作。

  1. 获取SIMI_BOOK中的所有图书
  2. 为bid1执行左连接
  3. 为bid2做另一个左连接
  4. 希望这有帮助。