3
我正在尋找一種更有效的方式來建立這個查詢記錄(雙子查詢讓我畏縮):那裏獲取相關表中的所有值均爲空
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
我現有查詢的邏輯如下:
- 檢索與相關地址和地區,爲了讓與非空值的任何地址的聯繫人首先訂購
- 適用於所有組,如果我減少到單個聯繫人記錄,並且如果地區與地區保留
- 適用where子句與至少一個區價值
它的工作原理刪除地址 - 它只是有點難看。
返回聯繫人沒有相關的a行或di行的記錄。我需要的是鏈接記錄的位置,但所有相關記錄的di.district值都爲空。該表中還有其他列 - 我的限制是在di.district值。 – lcdservices 2012-01-28 23:02:26
我能夠適應這一點,它似乎做的更好。我只是將HAVING子句更改爲:HAVING COUNT(di.district)= 0 – lcdservices 2012-01-28 23:19:55