SQL - 如何选择不包含特定ID的行

时间:2015-09-18 14:29:56

标签: mysql

所以我将表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"标记了一次。

4 个答案:

答案 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