【问题标题】:Getting null when join 3 tables in mysql在mysql中加入3个表时获取null
【发布时间】:2020-06-01 10:04:41
【问题描述】:

所以,这是我的表,我想使用 JOIN 查询连接 3 个表,但某些列总是为空,

mst_urusan +------------+------------+ | uid_urusan |乌鲁桑 | +------------+------------+ | 1 |磐安 | | 2 | KELAUTAN 丹佩里卡南 | | 3 |伯大尼人 | +------------+------------+ mst_program +--------------+------------------------------------ --------------------------------------------+------ ------+ | uid_program |程序 | uid_urusan | +--------------+------------------------------------ --------------------------------------------+------ ------+ | 11 |计划 Tata Kelola Pemerintahan | 1 | | 12 |程序 Peningkatan Ketersediaan, Distribusi dan Penanganan Kerawanan Pangan | 1 | | 13 |计划 Peningkatan Keanekaragaman Konsumsi dan Keamanan Pangan | 1 | | 14 |计划 Produktivitas Perikanan | 2 | | 15 |程序 Produktivitas Pertanian dan Peternakan | 3 | +--------------+------------------------------------ --------------------------------------------+------ ------+ mst_kegiatan +--------------+---------------------------------- --------------------------------------------+------ ------+--------------+ | uid_kegiatan |凯吉坦 | uid_urusan | uid_program | +--------------+---------------------------------- --------------------------------------------+------ ------+--------------+ | 1 | Pelayanan Administrasi Perkantoran | 1 | 1 | | 2 | Peningkatan Sarana dan Prasarana Aparatur | 1 | 1 | | 3 | Peningkatan Kapasitas dan Pengelolaan Sumber Daya Aparatur Perangkat Daerah | 1 | 1 | | 4 | Peningkatan Ketersediaan Pangan | 1 | 2 | | 5 | Koordinasi, Pemantauan dan Pemantapan Distribusi Pangan Daerah | 1 | 2 | | 6 |槟城喀拉瓦南邦甘 | 1 | 3 | | 7 | Diversifikasi Pengembangan Pangan | 1 | 3 | | 8 | Pengawasan Keamanan Pangan | 1 | 3 | | 9 | Pembinaan dan Pengembangan Perikanan | 2 | 4 | | 10 | Produktivitas Pertanian Perkotaan | 3 | 5 | | 11 | Pembinaan Peternakan dan Kesehatan Hewan | 3 | 5 | | 12 | Pengembangan Pertanian dan Perikanan Terpadu | 3 | 5 | +--------------+---------------------------------- --------------------------------------------+------ ------+--------------+

我尝试使用 JOIN,但列上有一些空值,

选择 `mst_urusan`.`urusan`, `mst_program`.`program`, `mst_kegiatan`.`kegiatan` 从 `mst_kegiatan` 左外连接 `mst_urusan` ON (`mst_kegiatan`.`uid_urusan` = `mst_urusan`.`uid_urusan`) 左外连接 `mst_program` ON (`mst_kegiatan`.`uid_program` = `mst_program`.`uid_program`)

结果是这样的,

+------------+---------+-------------- -------------------------------------------------- -------------+ |乌鲁桑 |程序 |凯吉坦 | +------------+---------+-------------- -------------------------------------------------- -------------+ |磐安 |空 | Pelayanan Administrasi Perkantoran | |磐安 |空 | Peningkatan Sarana dan Prasarana Aparatur | |磐安 |空 | Peningkatan Kapasitas dan Pengelolaan Sumber Daya Aparatur Perangkat Daerah | |磐安 |空 | Peningkatan Ketersediaan Pangan | |磐安 |空 | Koordinasi, Pemantauan dan Pemantapan Distribusi Pangan Daerah | |磐安 |空 |槟城喀拉瓦南邦甘 | |磐安 |空 | Diversifikasi Pengembangan Pangan | |磐安 |空 | Pengawasan Keamanan Pangan | | KELAUTAN 丹佩里卡南 |空 | Pembinaan dan Pengembangan Perikanan | |伯大尼人 |空 | Produktivitas Pertanian Perkotaan | |伯大尼人 |空 | Pembinaan Peternakan dan Kesehatan Hewan | |伯大尼人 |空 | Pengembangan Pertanian dan Perikanan Terpadu | +------------+---------+-------------- -------------------------------------------------- -------------+

我想要如下图的结果,有什么建议吗? https://i.stack.imgur.com/jO1Tc.png

【问题讨论】:

    标签: mysql sql codeigniter join mariadb


    【解决方案1】:

    kegiatan中没有uid_program,改变连接表的顺序可能会导致program列的数据

    SELECT 
      `mst_urusan`.`urusan`,
      `mst_program`.`program`,
      `mst_kegiatan`.`kegiatan`
    FROM
      `mst_urusan` 
      LEFT OUTER JOIN `mst_program` ON (`mst_program`.`uid_urusan` = `mst_urusan`.`uid_urusan`)
      LEFT OUTER JOIN `mst_kegiatan` ON (`mst_kegiatan`.`uid_program` = `mst_program`.`uid_program`)
    

    【讨论】:

      【解决方案2】:

      就您的示例数据而言,您似乎想在uid_urusan 列上加入mst_program 而不是uid_program

      如果是这样,请考虑:

      SELECT 
        u.`urusan`,
        p.`program`,
        k.`kegiatan`
      FROM
        `mst_kegiatan` k
        LEFT OUTER JOIN `mst_urusan` u  ON k.`uid_urusan` = u.`uid_urusan`
        LEFT OUTER JOIN `mst_program` p ON k.`uid_urusan` = p.`uid_urusan`
      

      请注意,我修改了您的查询以使用表别名:这使查询更易于读写。

      【讨论】:

      • 对不起,我认为我在输入数据时出错了,uid_program 列的值应该是 11,12,13 ... 987654326@ = p.`uid_program``
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2013-12-01
      • 2020-10-24
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多