Mysql SQL选择不在其他表中的项的计数,并进行额外的列检查

Mysql SQL选择不在其他表中的项的计数,并进行额外的列检查,mysql,sql,Mysql,Sql,这个标题没有意义,因为很难解释我想要的标题 因此,我有以下疑问: SELECT COUNT(*) AS missing FROM sites WHERE id NOT IN ( SELECT DISTINCT site_id FROM callback_votes WHERE ip='84.108.27.143') 这将返回尚未投票的站点数量,如果对所有站点投票,则返回0。(见链接,已解释) 但是在数据库中,我有一个

这个标题没有意义,因为很难解释我想要的标题

因此,我有以下疑问:

SELECT COUNT(*) AS missing
FROM sites
WHERE id NOT IN (
             SELECT DISTINCT site_id
             FROM callback_votes
             WHERE ip='84.108.27.143')
这将返回尚未投票的站点数量,如果对所有站点投票,则返回0。(见链接,已解释)

但是在数据库中,我有一个站点类型,它有一个名为
module
的列,所以我要做的是,检查sites.module是否等于“none”,然后将其计算为不在,就像在该查询中一样

假设您在db中有2个站点,您从未投票过任何站点-此查询将返回
2
,但如果选中“none”,它将只返回
1
,因为其中一个站点的模块设置为“none”,但这种情况很复杂

我试过这样做:

SELECT COUNT(*) AS missing
FROM sites
WHERE id NOT IN (
             SELECT DISTINCT site_id
             FROM callback_votes
             WHERE ip='84.108.27.143')
         OR module = 'none'
但是没有运气


在这个查询中有办法做到这一点吗?

正式地说,您可以将
不在
中更改为
不存在
,并在其中包含逻辑。我认为这是逻辑:

SELECT COUNT(*) AS missing
FROM sites s
WHERE NOT EXISTS (SELECT 1
                  FROM callback_votes cv
                  WHERE ip = '84.108.27.143' AND cv.site_id = s.id and s.module <> 'none'
                 );

你能提供一些例子来解释你想要的逻辑吗?我不明白为什么您的查询没有按您的要求执行。@GordonLinoff我显示的第一个查询做了我想要的(ed),但现在我添加了一个名为“module”的列,该列可以有值,但如果该列模块的值为“none”,则在这种情况下,查询不会将其计算为未投票站点(缺少)。假设有两行,一行没有模块值,不在回调_投票中,另一行有模块“none”。我想要的查询结果将是1这部作品就像一个符咒,需要了解它的含义。谢谢。@BenBeri它和我的一样=
SELECT COUNT(*) AS missing
FROM sites
WHERE id NOT IN (
             SELECT DISTINCT site_id
             FROM callback_votes
             WHERE ip='84.108.27.143') AND
      module <> 'none';