2017-08-11 30 views
-1

我遇到了我的MySQL查询问题。我想使用left join 3另一个表来显示id从一个表中显示。如何使用计数少于另一个表

什么我要的是

  1. 显示ID为NULL另一个表
  2. 1,并具有COUNT()<(获得另一个表列)

我尝试过,但它仍然是错误的:

SELECT p.id FROM penerimaan AS p 
LEFT JOIN perangkat AS per ON per.id_penerimaan=p.id 
LEFT JOIN permintaan AS pa ON pa.id=p.id_permintaan 
LEFT JOIN konfirmasi_permintaan AS k ON k.id_permintaan=pa.id 
WHERE per.id_penerimaan IS NULL 
GROUP BY p.id 
HAVING COUNT(per.id_penerimaan) < k.jumlahConfirm //how to get column in another table 
ORDER BY p.id ASC 

表我已经

table permintaan 
id  jumlah  status 
2   3    Confirmed 
3   5    Confirmed 
----------------------------------------------- 
table penerimaan 
id  id_permintaan date 
1   2    2017-07-12 
2   3    2017-08-12 
----------------------------------------------- 
table konfirmasi_permintaan 
id  id_permintaan  jumlahConfirmed 
1   2     3 
2   3     3 
----------------------------------------------- 
table perangkat 
id  id_penerimaan  serial  type 
1   1     766544  SG90D-08-AS 
2   1     552411  SLM2008T-EU 
3   1     552411  SLM2008T-TU 
4   2     561434  SG95-24-AS 

我期望这样

id_penerimaan 
2 

结果虽然在表perangkat id_penerimaan IS NULL但仍然显示,因为计数(perangkat.id_penerimaan)为2在表perangkat小于jumlahConfirm在表konfirmasi_permintaan

谢谢

+2

'COUNT(per.id_penerimaan)'只计算非空值。但'WHERE per.id_penerimaan IS NULL'意味着你只返回空行,因此计数将始终为0. – Barmar

+0

你可以显示一些示例数据和期望的结果吗? – Barmar

+0

我更新了我的问题,请再次检查:) @Barmar –

回答

1

删除WHERE per.id_penerimaan似乎解决了问题。您还必须将k.jumlahConfirmed添加到SELECT列表中,因为HAVING只能访问选择列表中的值,而不能访问原始表中的列。

SELECT p.id, k.jumlahConfirmed FROM penerimaan AS p 
LEFT JOIN perangkat AS per ON per.id_penerimaan=p.id 
LEFT JOIN permintaan AS pa ON pa.id=p.id_permintaan 
LEFT JOIN konfirmasi_permintaan AS k ON k.id_permintaan=pa.id 
GROUP BY p.id 
HAVING COUNT(per.id_penerimaan) < k.jumlahConfirmed 

DEMO

+0

这是行得通的,非常感谢:D –

相关问题