我有一张这样的桌子

idOne | date | input
------------------
1 | 2015-01-01 | 423
2 | 2015-01-01 | 342
1 | 2015-01-02 | 343
2 | 2015-01-02 | 332

在这张桌子上我会:
SELECT date, SUM(input)
FROM data
WHERE date BETWEEN "2015-01-01" AND "2015-01-02"
GROUP BY date

这给了我这个输出:
date | input
------------------
2015-01-01 | 765
2015-01-02 | 675

我的数据库中还有一个表,data
idTwo | idOne | label
------------------
1 | 1 | 'Hello, '
2 | 2 | 'World!'
3 | 1 | 'Hello, '
4 | 2 | 'World!'

正如您所看到的,这个数据库并没有完全规范化,但这就是我所拥有的。
我想按info-语句中label的值进行筛选。这让我头疼!每次尝试时,我的行都被求和多次。例如:
SELECT date, SUM(input)
FROM data, info
WHERE date BETWEEN "2015-01-01" AND "2015-01-02"
AND data.idOne = info.idOne
AND label = 'Hello,'
GROUP BY date

对每件事求两次和,得到这个结果:
date | input
------------------
2015-01-01 | 1530
2015-01-02 | 1350

我该怎么解决?谢谢。

最佳答案

如果您想要第一个表中的精确和,那么您可能需要exists

SELECT date, SUM(input)
FROM data d
WHERE date BETWEEN '2015-01-01' AND '2015-01-02' AND
      EXISTS (SELECT 1 FROM info i WHERE d.idOne = i.idOne AND i.label = 'Hello,')
GROUP BY date;

您还应该学习使用显式join语法。简单规则:不要在FROM子句中使用逗号。

关于mysql - MySQL:仅在单行上加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30262691/

10-11 20:17