0

Table1 と Table2 の 2 つのテーブルがあります。

表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

Table1 にはレコードが 1 つしかないため、1 にする必要があります。これに対する解決策はありますか?

4

2 に答える 2

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
于 2013-03-29T18:49:34.780 に答える
0

8時間後にこのことの最終的な解決策を確認してください。エンド ユーザーが郵便番号を入力して、郵便番号からスペースを削除し、str_replace でスペースをなくしてから、文字列の最後の 3 文字/数字を削除します。元の郵便番号とともに追加の列として保存すると、郵便番号が LS1 のように保存されます。LS11 、および like を使用した内部結合の代わりに、 = を使用します。これが唯一の方法だと信じています。

詳細については、このリンクを参照してください

于 2013-03-30T03:38:34.080 に答える