所以我将表flag_counts包含以下列:
flag_id content_id
1 10
2 10
2 11
以及以下查询
SELECT flag_id, content_id FROM flag_counts
WHERE flag_id != 1
当然会返回
flag_id content_id
2 10
2 11
如何更改查询以便返回所有未标记为" 1"的content_ids。在这个例子中,我希望查询只返回表的最后一行,因为content_id" 10"用" 1"标记了一次。
答案 0 :(得分:3)
按\
分组,仅使用content_id
flag_id = 1
答案 1 :(得分:1)
这解决了这个问题:如何更改我的查询以便返回所有未标记为“1”的content_ids?“澄清”实际上更令人困惑,因为SQL表代表无序集,所以没有“最后一行”。
如果您有一个单独的内容ID表,那么最快的方法可能是:
select c.*
from contents c
where not exists (select 1
from flag_count fc
where fc.content_id = c.content_id and flag_id = 1
);
为此,您需要flag_count(content_id, flag_id)
上的索引。
如果您使用flag_count
代替contents
,则可能会出现重复项。
答案 2 :(得分:0)
SELECT whatever
FROM flag_counts
WHERE content_id NOT IN (
SELECT content_id
FROM flag_counts
WHERE flag_id = 1
)
或通过JOIN
SELECT DISTINCT c1.*
FROM flag_counts c1
LEFT JOIN flag_counts c2
ON c1.content_id = c2.content_id and c2.flag_id = 1
WHERE c2.content_id IS NULL;
答案 3 :(得分:0)
可以使用以下方法之一来解决此问题。
count