2013-03-29 78 views
0

我有两个表:Table1和Table2。mysql内部连接计数问题

表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上只有一条记录。任何解决方案?

回答

0

确定为8小时后这件事情最终的解决方案。通过最终用户的邮政编码输入,将邮编修剪掉任何空格,然后str_replace空格为空,然后取下字符串的最后3个字母/数字。并将其另存为一个附加列以及原始邮政编码,现在您将拥有邮政编码商店,如LS1。 LS11,而不是内部连接使用like,use =。这是我相信唯一的出路。

This link更多信息

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 
+0

其他条目由最终用户可以在表1一样的,所以我不希望它不同,我只是希望它算上这一次,一个 –

+0

@AhmedElGamil - 这是它计数两次,因为它发现表2中的2个匹配 - 1个LS1和1个LS11 - 因此,你需要计数不同的原因。对不起,这没有帮助。你可以只计算DISTINCT log_id ... – sgeddes

+0

感谢你的回答,我会寻找一些可能区别区域表中连接值的东西,然后进行计数。 –