SQL选择缺少值的行

时间:2017-02-24 14:10:17

标签: mysql sql select

我有一张这样的表:

id      group_id    meta
1       A           last_activity
2       A           post_id
3       B           last_activity
4       C           last_activity
5       C           post_id

我想只返回没有值的group_id" post_id'在列meta

我尝试过NOT IN<>等不同的解决方案,但我无法得到正确的结果。

类似的东西:

$sql_group_id = ("SELECT group_id FROM `table` WHERE meta <> 'post_id'");

结果将是:group_id = B

我该怎么做?

5 个答案:

答案 0 :(得分:8)

试试这个:

SELECT group_id
FROM mytable
GROUP BY group_id
HAVING SUM(meta='post_id') = 0

查询在其HAVING子句中使用条件聚合,以便过滤掉至少有一条与meta='post_id'相关的记录的记录组。

答案 1 :(得分:2)

SELECT group_id 
FROM `table` 
WHERE group_id NOT IN (SELECT group_id
                       FROM `table`
                       WHERE meta like '%post_id%'
                       GROUP BY group_id);

或者可以尝试:

SELECT group_id 
FROM `table` 
WHERE group_id NOT IN (SELECT DISTINCT group_id
                       FROM `table`
                       WHERE TRIM(BOTH ' ' FROM meta like) = 'post_id');

答案 2 :(得分:0)

您的查询返回具有任何其他元值的group_ids。相反,您应该使用not exists运算符来查询那些没有post_id元值的人:

SELECT DISTINCT group_id
FROM   mytable a
WHERE  NOT EXISTS (SELECT *
                   FROM   mytable b
                   WHERE  a.group_id = b.group_id and b.meta = 'post_id')

答案 3 :(得分:0)

使用CASE表达式。

<强>查询

select t.`group_id` from(
    select `group_id`, 
    sum(case `meta` when 'post_id' then 1 else 0 end) as `new_col`
    from `table`
    group by `group_id`
)t
where t.`new_col` = 0;

答案 4 :(得分:0)

使用以下

$sql_group_id = ("SELECT group_id FROM `table` WHERE meta not in ('post_id')");
相关问题