我有两张表 alamat_penerima 和 lokasi
alamat penerima表 [这是我的记录
然后
lokasi table [这是记录
我不会像这样制作两张桌子 [图]
我希望你能帮助我
我刚试过这个查询命令:
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`
但结果是
答案 0 :(得分:1)
你的问题很难理解,所以这个答案是猜测。在我看来,您希望列出每个地区的收件人地址数量,但也会显示没有地址的地区。
为此,您需要将两个子查询连接在一起。
此子查询生成所有区域的名称。
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
值作为查询的第一行使用。{/ p>
SELECT w.wilayah, IFNULL(a.num,0) num
设计技巧是让你的第一个子查询确定结果集中的行数,然后使用LEFT JOIN将后续子查询中的信息放入结果中。