Получение нулевого значения при объединении 3 таблиц в mysql - PullRequest
0 голосов
/ 17 февраля 2020

Итак, вот мои таблицы, я хотел бы объединить 3 таблицы, используя запрос JOIN, но всегда получая значение NULL в каком-либо столбце,

mst_urusan
+------------+------------------------+
| uid_urusan | urusan                 |
+------------+------------------------+
|          1 | PANGAN                 |
|          2 | KELAUTAN DAN PERIKANAN |
|          3 | PERTANIAN              |
+------------+------------------------+

mst_program
+-------------+------------------------------------------------------------------------------+------------+
| uid_program | program                                                                      | uid_urusan |
+-------------+------------------------------------------------------------------------------+------------+
|          11 | Program Tata Kelola Pemerintahan                                             |          1 |
|          12 | Program Peningkatan Ketersediaan, Distribusi dan Penanganan Kerawanan Pangan |          1 |
|          13 | Program Peningkatan Keanekaragaman Konsumsi dan Keamanan Pangan              |          1 |
|          14 | Program Produktivitas Perikanan                                              |          2 |
|          15 | Program Produktivitas Pertanian dan Peternakan                               |          3 |
+-------------+------------------------------------------------------------------------------+------------+

mst_kegiatan
+--------------+-----------------------------------------------------------------------------+------------+-------------+
| uid_kegiatan | 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 | Penanganan Kerawanan Pangan                                                 |          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, но у меня есть некоторое значение NULL в столбце

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

результат будет примерно таким:

+------------------------+---------+-----------------------------------------------------------------------------+
| urusan                 | program | kegiatan                                                                    |
+------------------------+---------+-----------------------------------------------------------------------------+
| PANGAN                 | NULL    | Pelayanan Administrasi Perkantoran                                          |
| PANGAN                 | NULL    | Peningkatan Sarana dan Prasarana Aparatur                                   |
| PANGAN                 | NULL    | Peningkatan Kapasitas dan Pengelolaan Sumber Daya Aparatur Perangkat Daerah |
| PANGAN                 | NULL    | Peningkatan Ketersediaan Pangan                                             |
| PANGAN                 | NULL    | Koordinasi, Pemantauan dan Pemantapan Distribusi Pangan Daerah              |
| PANGAN                 | NULL    | Penanganan Kerawanan Pangan                                                 |
| PANGAN                 | NULL    | Diversifikasi Pengembangan Pangan                                           |
| PANGAN                 | NULL    | Pengawasan Keamanan Pangan                                                  |
| KELAUTAN DAN PERIKANAN | NULL    | Pembinaan dan Pengembangan Perikanan                                        |
| PERTANIAN              | NULL    | Produktivitas Pertanian Perkotaan                                           |
| PERTANIAN              | NULL    | Pembinaan Peternakan dan Kesehatan Hewan                                    |
| PERTANIAN              | NULL    | Pengembangan Pertanian dan Perikanan Terpadu                                |
+------------------------+---------+-----------------------------------------------------------------------------+

Я хотел бы получить результат, подобный изображенному ниже, какие-либо предложения? https://i.stack.imgur.com/jO1Tc.png

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Что касается ваших данных выборки, кажется, что вы хотите присоединиться к mst_program в столбце uid_urusan, а не 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`

Обратите внимание, что я изменил ваш запрос, чтобы использовать псевдонимы таблиц: это облегчает чтение и запись запроса.

0 голосов
/ 17 февраля 2020

В kegiatan нет uid_program's, изменение порядка объединения таблиц может привести к получению данных для столбца программы

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`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...