SQL查询记录加倍左加入
问题描述:
我有2个表,我使用连接从这两个表中获取通用记录。SQL查询记录加倍左加入
我已经使用了下面的查询,但我的问题是我得到的记录加倍。
查询如下,你能帮我吗?
查询#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
答
修改了你的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总是欢迎。 –
在这些情况下,我将SELECT替换为SELECT *,然后运行没有GROUP BY的查询,并查看每行。没有完整的数据库,几乎不可能猜出问题所在。 – Linkan
@Linkan谢谢yuo的帮助,但是我发布了**查询#1 **,没有** GROUP BY ** –
那str_to_date位似乎有点多余 – Strawberry