Mysql 检查是否没有;“真的”;“每”的价值;id";
我需要找到域链接id,它没有任何(is\u active=true)值 我创建了以下查询,但此查询无法正常工作。您能帮助我修复此查询吗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_
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