2011-04-29 43 views
1

朋友你好我有 報價表如下表結構充分利用數據庫表類似的行

enter image description here

我要訪問所有類似的報價(有相同的AUTHOR_ID和CATEGORY_ID)特定_id( quoteId)

類似的引號表示同一個category_id和author_id相同的表中所有這些行的所有列。如果兩位作者的作者相同且類別相同,則可以將兩個引號視爲相似。

+2

你是什麼意思的相似報價?你期望什麼樣的結果集? – JohnP 2011-04-29 10:40:11

+0

在此查詢中查詢「sql server全文索引」 – 2011-04-29 10:41:04

回答

1

相同的作者ID和類別ID?

SELECT `related_quote`.* 
FROM `quote` AS `main_quote` 
LEFT JOIN `quote` AS `related_quote` USING(`author_id`, `category_id`) 
WHERE `main_quote`.`_id` = QUOTE_ID 

這會得到你原來的報價(即。QUOTE_ID)和所有與它相關的信息。

mysql> SELECT `related_quote`.* 
    -> FROM `quote` AS `main_quote` 
    -> LEFT JOIN `quote` AS `related_quote` USING(`author_id`, `category_id`) 
    -> WHERE `main_quote`.`_id` = 1; 
+------+----------------+-----------+-------------+ 
| _id | content  | author_id | category_id | 
+------+----------------+-----------+-------------+ 
| 1 | test   |   1 |   1 | 
| 2 | test related |   1 |   1 | 
| 3 | test related 2 |   1 |   1 | 
+------+----------------+-----------+-------------+ 
3 rows in set (0.01 sec) 

您可以通過簡單地增加

AND `related_quote`.`_id` != QUOTE_ID 

到查詢的末尾移除從ResultSet的QUOTE_ID。

+0

感謝人的好概念,如果在這裏使用子句 – Abhi 2011-04-29 10:53:54

+0

沒有概率,添加了一個快速子句,您可以在結束標記以從結果集中排除當前查詢。 – 2011-04-29 10:54:33

+0

亞感謝讓我知道這個,所以從結果我可以刪除一個 – Abhi 2011-04-29 10:56:03

1
select 
    q1.* 
from 
    quotes q1 
inner join 
    (select 
     author_id, 
     category_id 
    from 
     quotes 
    where 
     _id = 1) q2 
ON 
    q1.author_id = q2.author_id 
AND 
    q1.category_id = q2.category_id 
+0

如果quote表的別名是q1,那麼q2是什麼? – Abhi 2011-04-29 10:45:14

+0

連接(即原始報價)。 – 2011-04-29 10:46:07

+0

雅我現在得到它,謝謝你,並很好的回答 – Abhi 2011-04-29 10:53:26