首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检索相关表中所有值都为空的记录。

检索相关表中所有值都为空的记录。
EN

Stack Overflow用户
提问于 2012-01-28 16:58:58
回答 1查看 188关注 0票数 3

我正在寻找一种更有效的方法来构建这个查询(双子查询使我感到畏缩):

代码语言:javascript
复制
SELECT contact_id FROM (
  SELECT * FROM (
    SELECT mr.contact_id, di.district
    FROM recipients mr
    JOIN address a ON mr.contact_id = a.contact_id
    JOIN district_values di ON a.id = di.entity_id
    WHERE mr.mid = 29
    ORDER BY di.district DESC ) addrSingle
  GROUP BY mr.contact_id ) addrNull
WHERE di.district IS NULL

让我解释一下这是怎么回事。

收件人持有联系人列表。每个联系人可能有多个地址。每个地址都有一个相关的district_values表。我需要检索所有地址的district_values.district列为空的联系人。

例如:

代码语言:javascript
复制
Contact A
Address 1.district = 4
Address 2.district = null
= don't include

Contact B
Address 1.district = null
= include

Contact C
Address 1.district = null
Address 2.district = 3
= don't include

我现有查询的逻辑如下:

  1. 检索具有相关地址和地区的联系人,然后对具有非空值的地址进行排序,以便首先对

进行排序。

  1. 应用组,因此我将减少为单个联系人记录,如果保留了地区地址,则保留

  1. 应用where子句删除至少一个区域值

的地址

它很管用--只是有点丑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-28 17:09:11

您可以尝试这样做,使用左联接并计数相关记录为零。

代码语言:javascript
复制
SELECT mr.contact_id 
    FROM recipients mr 
LEFT JOIN address a ON mr.contact_id = a.contact_id  
LEFT JOIN district_values di ON a.id = di.entity_id 
    WHERE mr.mid = 29 
GROUP BY mr.contact_id
    HAVING COUNT(a.*) = 0 AND COUNT(di.*) = 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9047056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档