Mysql查询问题

时间:2010-10-20 15:47:05

标签: sql mysql

我正在尝试解决以下问题:

             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

然而,它似乎不起作用。会发生什么是在子查询中找到的数字仍在计算中。我做错了什么?

谢谢你们。

1 个答案:

答案 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

如果仍然返回您不想看到的数字,那么您将不得不查看您用于过滤数字的正则表达式。