我有两个表address_response和位置
收件人地址表[这是我的记录
然后
lokasi表[这是记录
我想制作两张这样的表[查看]
我希望你能帮帮我
我刚试过这个查询命令:
SELECT COUNT(alamat_penerima.`nama_penerima`) AS penerima, lokasi.`wilayah`
FROM lokasi
INNER JOIN alamat_penerima ON alamat_penerima.`kota_kab` = lokasi.`wilayah`
GROUP BY alamat_penerima.`kota_kab`
但结果是
你的问题很难理解,所以这个答案是猜测。在我看来,您希望列出每个区域中的收件人地址数量,但也显示没有地址的区域。
为此,您需要将两个子查询连接在一起。
此子查询生成所有区域的名称。
SELECT DISTINCT wilayah FROM lokasi
此子查询生成一个区域列表,其中包含每个区域中的地址计数。但是,此子查询的结果集省略了没有地址的区域。
SELECT COUNT(*) num, kota_kab AS wilayah
FROM alamat_penerima
GROUP BY kota_kab
您可以单独测试这些子查询以确定它们是否正确。这样做很重要。
最后,您将这两者结合在一起就好像它们是表格一样。 (这就是为什么它被称为结构化查询语言)。
SELECT w.wilayah, a.num
FROM (
SELECT DISTINCT wilayah FROM lokasi
) w
LEFT JOIN (
SELECT COUNT(*) num, kota_kab AS wilayah
FROM alamat_penerima
GROUP BY kota_kab
) a ON w.wilaya = a.wilaya
这将产生你想要的,但在没有地址的行中显示NULL
而不是0
。 (这是使用LEFT JOIN
的结果)您可以将0
值放在那里,而不是将其作为查询的第一行。
SELECT w.wilayah, IFNULL(a.num,0) num
设计技巧是让您的第一个子查询确定结果集中的行数,然后使用LEFT JOIN将后续子查询中的信息放入结果中。