2011-04-29 30 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