减少特定字段具有相似数据的记录集。 (MySQL)
问题描述:
我有两个表,'讨论'和'讨论_响应'。 'discussion_responses'中使用来自'讨论'的唯一ID来标识论坛中原始帖子的回复。我创建了以下查询来提取具有NEW回复但未链接到新主题的帖子。这两个表已经添加了日期字段和“colname的”是Dreamweaver的从另一个表中检索为访问者的最后登陆日期变量名:减少特定字段具有相似数据的记录集。 (MySQL)
SELECT *
FROM discussion, discussion_responses
WHERE discussion.discussion_date < colname
AND discussion_responses.discussion_date > colname
AND discussion.discussion_ID = discussion_responses.discussion_ID
ORDER BY discussion.discussion_title ASC
我的问题是,一个以上的答复已到由原来的帖子,我自然会得到多个讨论ID的结果。任何人都可以请我告诉我如何消除包含相同discussion_ID的后续行?选择哪条记录并不重要,只有我可以获得与其关联的新答复的任何主题的标识。谢谢。
答
如果您只是对discussion_ID感兴趣,可以使用distinct或group by。下面是具有鲜明的例子:
SELECT DISTINCT discussion_ID
FROM discussion d
INNER JOIN discussion_responses dr
ON d.discussion_ID = dr.discussion_ID
WHERE d.discussion_date < colname
AND dr.discussion_date > colname
如果你也有兴趣在其他列,过滤器上的不同ID的子查询:
SELECT *
FROM discussion d
WHERE d.discussion_ID IN (
<query from above here>
)
答
此:
SELECT *
FROM discussion d
WHERE discussion_date < colname
AND EXISTS
(
SELECT NULL
FROM discussion_responses dr
WHERE dr.discussion_date > colname
AND dr.discussion_ID = d.discussion_ID
)
ORDER BY
d.discussion_title ASC
或本:
SELECT d.*
FROM (
SELECT DISTINCT discussion_ID
FROM discussion_responses dr
WHERE dr.discussion_date > colname
)
JOIN discussion d
ON d.discussion_ID = dr.discussion_ID
WHERE d.discussion_date < colname
ORDER BY
d.discussion_title ASC
拿铁咖啡r查询可能会更快,因为在第二个查询的引导表(discussion_responses)
中使用的条件更具选择性。
创建索引discussion_responses (discussion_date, discussion_id)
。
谢谢,伙计们。这很有用。 – Richard 2010-01-22 15:42:32