我有两个表: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上只有一条记录。对此有何解决方案?
答案 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了解详情