Mysql 检查是否没有;“真的”;“每”的价值;id";

Mysql 检查是否没有;“真的”;“每”的价值;id";,mysql,Mysql,我需要找到域链接id,它没有任何(is\u active=true)值 我创建了以下查询,但此查询无法正常工作。您能帮助我修复此查询吗 SELECT distinct domain_link_history.id,domain_link_history.domain_link_id FROM domain_link_history INNER JOIN ( SELECT id,is_active FROM domain_link_history GROUP BY domain_link_

我需要找到域链接id,它没有任何(is\u active=true)值

我创建了以下查询,但此查询无法正常工作。您能帮助我修复此查询吗

SELECT distinct domain_link_history.id,domain_link_history.domain_link_id 
FROM domain_link_history
INNER JOIN (
SELECT id,is_active 
FROM domain_link_history 
GROUP BY domain_link_id HAVING count(is_active) > 1) dlh2 
ON domain_link_history.id = dlh2.id 
where domain_link_history.is_active = false
先谢谢你


干杯,

我想您需要以下物品:

SELECT domain_link_id 
FROM domain_link_history
WHERE is_active <> 'true'
GROUP BY domain_link_id

这只是为了防止您在
是否处于活动状态字段中除了简单的true和false之外还有其他选项

可能对子查询执行左连接

SELECT DISTINCT domain_link_id
FROM domain_link_history a
LEFT OUTER JOIN
(
    SELECT DISTINCT domain_link_id
    FROM domain_link_history
    WHERE is_active = 'true'
) sub1
ON a.domain_link_id = Sub1.domain_link_id
WHERE Sub1.domain_link_id IS NULL
或使用sum的替代方法:-

SELECT domain_link_id, SUM(IF(is_active = 'true', 1, 0)) AS true_count
FROM domain_link_history
GROUP BY domain_link_id
HAVING true_count = 0

(均未测试)

您是否尝试将
SUM
大小写
表达式一起使用

SELECT      MIN(id) AS id
            , domain_link_id
FROM        domain_link_history
GROUP BY    domain_link_id
HAVING      SUM(CASE WHEN is_active = true THEN 1 ELSE 0 END) = 0
您还可以尝试使用
MIN
MAX
聚合:

SELECT  t1.id
        , t1.domain_link_id
FROM    domain_link_history AS t1
        INNER JOIN (
            SELECT      MIN(id) AS id
                        , domain_link_id
            FROM        domain_link_history
            GROUP BY    domain_link_id
            HAVING      MIN(is_active) = MAX(is_active)
        ) AS q1
            ON  q1.id = t1.id
            AND q1.domain_link_id = t1.domain_link_id
WHERE   q1.domain_link_id = false
上面的子查询将找到
处于活动状态的所有记录
完全
为false
或完全
为true
,然后只需从外部查询中选择
为false
的记录

我已经修改了的查询,现在它就可以工作了

SELECT domain_link_id, 
SUM(IF(is_active = 'true', 1, 0)) AS false_count , 
Count(is_active) as history_row_count
FROM domain_link_history
GROUP BY domain_link_id
HAVING false_count = history_row_count

嗯,我不太明白……像这样的事?从domain\u link\u history where is\u active='false'中选择domain\u link\u id。嗨,Jon,谢谢你的回答。但是我得到的结果与你的第一个查询相同。我想我没有解释清楚。我需要查看domain\u link\u id,它没有任何is\u active=true值。这个查询也会给我domain\u link\u id,它有一个“is\u active=true”value-。您好,我已经修改了您的第二个查询,现在它可以工作了。谢谢;)没问题,但不确定为什么需要修改它。修改后的版本应该会给出相同的结果(据我所知),但需要一个额外的聚合函数。我可能误解了你的要求,但不确定是什么!。您的第二个查询为我提供了域链接id的结果,它只有is\u active=true。我在你的查询中得到了13个结果,在修改后的查询中得到了126个结果。我肯定遗漏了一些东西。查询首先应给出所有域链接ID的列表,并将“有多少个处于活动状态”的计数设置为true。然后have应该丢弃任何计数不为零的地方(即,有一行is_active=true的地方)。很抱歉打扰你,我只是想弄清楚我错过了什么,如果你想做的话。我可以给你发送“表脚本”和一些数据。如果你愿意,你可以在你的机器上测试它。
SELECT domain_link_id, 
SUM(IF(is_active = 'true', 1, 0)) AS false_count , 
Count(is_active) as history_row_count
FROM domain_link_history
GROUP BY domain_link_id
HAVING false_count = history_row_count