一个查询中有两个要求

时间:2012-11-30 00:40:04

标签: sql database

我的表架构如下所示:

table posts (id integer (primary key), parentid integer, tags varchar, ...)

对于任何帖子,它是一个帖子中的第一个帖子,它们的parentid为NULL,标签等于一个字符串。 任何其他帖子不是一个帖子中的第一篇帖子,他们的parentid是该帖子中第一篇帖子的id,标签是NULL。

我可以通过

查询特定主题的所有“第一篇帖子”
SELECT * FROM posts WHERE tags LIKE '%topic%';

但是如何查询所有帖子,包括特定主题的回复?


假设我有这样的记录

id   parentid   tags
--------------------
123     null   topic
222     123     null
223     123     null
444     null   topic
555     null   hello

如何让所有ID讨论主题,分别是123,222,223,444?

1 个答案:

答案 0 :(得分:3)

SELECT * FROM posts 
WHERE tags LIKE '%topic%'
UNION ALL
SELECT * FROM posts 
WHERE PARENTID IN 
  (SELECT ID FROM POSTS WHERE tags LIKE '%topic%')

SELECT p.*, r.* FROM posts p
LEFT JOIN posts r ON r.ID = p.ID
WHERE p.tags LIKE '%topic%'

我认为第一个是更干净的,因为它为帖子返回一行,为每个响应返回一行。第二个更容易实现作为查询,但其结果更难处理,并导致数据库和脚本之间的流量更多,这是一种浪费,特别是如果你有一个单独的数据库服务器。