2016-09-26 4 views
0

2つのテーブルがあり、2つのテーブルから共通のレコードを取得するためにjoinを使用しています。レコードがSQLクエリで2倍になりました。

私は以下のクエリを使用しましたが、私の問題はレコードを倍増させていることです。

質問は次のとおりです。お手伝いできますか?

クエリ#1:(正しい出力)

mysql> SELECT DISTINCT 
    xId1 AS xId1, 
    xArea AS xArea, 
    YEAR (
     STR_TO_DATE(
      `xDate`, 
      '%d/%m/%Y' 
     ) 
    ) AS xYear 
FROM 
    doTable1 AA 
LEFT JOIN doTable2 BB ON AA.xId1 = BB.xId2 
WHERE 
    xArea IN ('XX1A') 
AND YEAR (
    STR_TO_DATE(
     `xDate`, 
     '%d/%m/%Y' 
    ) 
) = 2016; 

+-----------+-------+-------+ 
| xId  | xArea | xYear | 
+-----------+-------+-------+ 
| 91623545 | XX1A | 2016 | 
| 89748942 | XX1A | 2016 | 
| 115956872 | XX1A | 2016 | 
| 103595808 | XX1A | 2016 | 
| 103623873 | XX1A | 2016 | 
| 103623892 | XX1A | 2016 | 
| 103623872 | XX1A | 2016 | 
| 103623894 | XX1A | 2016 | 
| 112072738 | XX1A | 2016 | 
| 112072751 | XX1A | 2016 | 
| 117818773 | XX1A | 2016 | 
| 117818753 | XX1A | 2016 | 
| 117885105 | XX1A | 2016 | 
| 117960040 | XX1A | 2016 | 
| 117885111 | XX1A | 2016 | 
+-----------+-------+-------+ 

15 rows in set 

クエリ#2:(誤った出力2016年のために私は18本の記録を持っているので - クエリのよう15件のレコードをしていない - 存在感を倍増#1):

mysql> SELECT 
    DISTINCT COUNT(*) AS xQQQ, 
    xArea AS xArea, 
    YEAR (
     STR_TO_DATE(
      xDate, 
      '%d/%m/%Y' 
     ) 
    ) AS xYear 
FROM 
    doTable1 AA 
LEFT JOIN doTable2 BB ON AA.xId1 = BB.xId2 
WHERE xArea IN ('XX1A') 
GROUP BY 
    xArea, 
    xYear; 
+------+-------+-------+ 
| xQQQ | xArea | xYear | 
+------+-------+-------+ 
| 4 | XX1A | 2014 | 
| 49 | XX1A | 2015 | 
| 18 | XX1A | 2016 | 
+------+-------+-------+ 
3 rows in set 
+0

これらのケースでは、SELECT *をSELECT *に置き換え、GROUP BYを使わずにクエリを実行して、各行を調べます。完全なデータベースを持たないと問題が何かを推測することはほとんど不可能です。 – Linkan

+0

@Linkanヘルプに感謝していますが、**クエリ#1 **を** GROUP BY **なしで投稿しました** –

+0

str_to_dateビットが少し冗長に見えます – Strawberry

答えて

1

SQLを変更しました。別のカウントが必要な場合は、このように使用する必要があります。

COUNT(DISTINCT xId1) 

実行して見てください。

SELECT 
     COUNT(DISTINCT xId1) AS xQQQ, 
     xArea AS xArea, 
     YEAR (
      STR_TO_DATE(
       `DATA PUBBLICAZIONE`, 
       '%d/%m/%Y' 
      ) 
     ) AS xYear 
    FROM 
     doTable1 AA 
    LEFT JOIN doTable2 BB ON AA.xId1 = BB.xId2 
    WHERE xArea IN ('XX1A') 
    GROUP BY 
     xArea, 
     xYear; 
+0

ありがとうございました! –

+0

@AntonioMailtraqはいつでもようこそ。 –

関連する問題