我正在尝试解决以下问题:
SELECT did_numbers.did_dialstring,
netareas.netarea_name,
did_numbers.did_size,
CASE WHEN (reseller_id < 1) IS NULL THEN 'F'
ELSE 'T'
END as reseller,
COUNT(*) AS aantal
FROM did_numbers
LEFT JOIN reseller_numbers ON (did_numbers.did_number = reseller_numbers.did_number AND reseller_numbers.did_number NOT IN(
SELECT did_number
FROM reseller_numbers
WHERE did_number
REGEXP '^31([0-9]{2,3})71([0-9]{4,5})$'
))
LEFT JOIN netareas ON did_numbers.did_dialstring = netareas.netarea_code
WHERE did_numbers.did_number NOT IN (
SELECT did_number
FROM did_numbers
WHERE did_number
REGEXP '^31([0-9]{2,3})71([0-9]{4,5})$'
)
GROUP BY did_numbers.did_dialstring, did_numbers.did_size, reseller
ORDER BY did_numbers.did_dialstring, reseller ASC
然而,它似乎不起作用。会发生什么是在子查询中找到的数字仍在计算中。我做错了什么?
谢谢你们。
答案 0 :(得分:1)
以下是我对您的查询的重写:
SELECT a.did_dialstring,
na.netarea_name,
a.did_size,
CASE
WHEN reseller_id IS NULL THEN 'F'
ELSE 'T'
END as reseller,
COUNT(*) AS aantal
FROM DID_NUMBERS a
LEFT JOIN RESELLER_NUMBERS rn ON rn.did_number = a.did_number
AND rn.did_number NOT REGEXP '^31([0-9]{2,3})71([0-9]{4,5})$'
LEFT JOIN NETAREAS na ON na.netarea_code = a.did_dialstring
LEFT JOIN DID_NUMBERS dn ON dn.did_number = a.did_number
AND dn.did_number NOT REGEXP '^31([0-9]{2,3})71([0-9]{4,5})$'
WHERE dn.did_number IS NULL
GROUP BY a.did_dialstring, a.did_size, reseller
ORDER BY a.did_dialstring, reseller ASC
如果仍然返回您不想看到的数字,那么您将不得不查看您用于过滤数字的正则表达式。