mysql内连接计数问题

时间:2013-03-29 18:48:12

标签: php mysql

我有两个表:Table1和Table2。

表1:

log_id | postcode
1      |  LS11LS

表2:

region | postcode
Leeds     | LS1
Leeds     | LS11

当我使用以下查询时,

SELECT table2.region 'Region', 
       Count(table1.postcode) AS 'count' 
FROM   table1 
INNER JOIN table2 
   ON table1.postcode LIKE Concat(table2.postcode, '%') 

我得到了

Region   |   count
Leeds    |    2

它应该是1,因为Table1上只有一条记录。对此有何解决方案?

2 个答案:

答案 0 :(得分:1)

听起来你需要使用DISTINCT

SELECT table2.region 'Region', 
    COUNT( DISTINCT table1.log_id )  as 'count' 
FROM table1 
    INNER JOIN table2 ON 
        table1.postcode LIKE CONCAT( table2.postcode,  '%' )

我用log_id替换了邮政编码,因为它可能是你唯一的专栏。

编辑:虽然我不确定你在寻找什么,但这是使用子查询的另一种方法:

SELECT Region, COUNT(1) as 'Count'
FROM Table1 T
    JOIN (
        SELECT DISTINCT T2.Region, T.PostCode
        FROM table1 T
            INNER JOIN table2 T2 ON 
                    T.postcode LIKE CONCAT( T2.postcode,  '%' )
    ) T2 ON T.PostCode = T2.PostCode

答案 1 :(得分:0)

确定8小时后这个东西的最终解决方案。通过最终用户的邮政编码条目,将邮政编码从任何空格中删除,然后将空格str_replace为空,然后取下字符串的最后3个字母/数字。并将其与原始邮政编码一起保存为附加列,现在您将拥有像LS1一样的邮政编码存储。 LS11,而不是使用like的内连接,使用=。这是我相信唯一的出路。

请参阅This link了解详情