我正在寻找一种更有效的方法来构建这个查询(双子查询使我感到畏缩):
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列为空的联系人。
例如:
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我现有查询的逻辑如下:
进行排序。
。
的地址
它很管用--只是有点丑。
发布于 2012-01-28 17:09:11
您可以尝试这样做,使用左联接并计数相关记录为零。
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.*) = 0https://stackoverflow.com/questions/9047056
复制相似问题