我的数据库中有以下数据:
scu银行:
---------------------------------
| id | type | name |
|-------------------------------|
| 1 | 1 | One |
| 2 | 1 | Two |
| 3 | 2 | Three |
| 4 | 3 | Four |
---------------------------------
scu声明:
---------------------------------
| id | code | status |
|-----------------------------------|
| 1 | 1 | 0 |
| 2 | 1 | 1 |
| 3 | 2 | 0 |
| 4 | 1 | 0 |
-------------------------------------
我要做的是选择表中的所有行 scu_banks
然后计算我有多少行的状态为0。数据应表示为:
--------------------------------------------------------------
| scu_banks.type | scu_banks.name | status | scu_banks.id |
--------------------------------------------------------------
| 1 | One | 2 | 1 |
| 1 | Two | 0 | 2 | //There is no row with status 0
| 2 | Three | 0 | 3 |
| 3 | Four | 0 | 4 |
--------------------------------------------------------------
当我运行sql语句时,我得到以下数据:
---------------------------------------------------------------
| scu_banks.type | scu_banks.name | status | scu_banks.id |
--------------------------------------------------------------
| 1 | One | 2 | 1 |
---------------------------------------------------------------
我得到的数据是正确的。2它是表中所有行的总数 scu_statement
. 语句也不显示数据库中的其他行。
有人知道我的sql语句有什么问题吗?
下面是我的sql语句:
SELECT b.type 'scu_banks.type',
b.name 'scu_banks.name',
count(y.status) 'status',
b.id 'scu_banks.id'
FROM scu_banks b
LEFT JOIN (SELECT s.code, count(s.status) status
FROM scu_bankstatement s
WHERE status='0'
GROUP BY s.code) y
ON y.code = b.id
1条答案
按热度按时间yeotifhr1#
你需要一个
GROUP BY
在您的外部查询中,否则查询只计算所有银行的状态。您还可以通过LEFT JOIN
在code/id和status=0的两个表中输出
在dbfiddle上演示