Соединение 5 таблиц, но исключая значения из 5-го - PullRequest
0 голосов
/ 29 марта 2020

Таблицы данных

Я получил 5 таблиц с определенными значениями:

  1. Таблица: tbl_1
+-------+-------+
| nm_id | name  |
+-------+-------+
|     1 | name1 |
|     2 | name2 |
|     3 | name3 |
+-------+-------+
Таблица: tbl_2
+-------+-------+-------+
|post_id| nm_id | post  |
+-------+-------+-------+
|     1 |     1 | text1 |
|     2 |     1 | text2 |
|     3 |     2 | text3 |
+-------+-------+-------+
Таблица: tbl_3
+-------+-------+-------+-------+
|com_id |post_id| nm_id | com   |
+-------+-------+-------+-------+
|     1 |     1 |     1 | text1 |
|     2 |     2 |     1 | text2 |
|     3 |     2 |     2 | text3 |
+-------+-------+-------+-------+
Таблица: tbl_4
+-------+-------+-------+-------+-------+
|com2_id|com_id||post_id| nm_id | com2  |
+-------+-------+-------+-------+-------+
|     1 |     1 |     1 |     1 | text1 |
|     2 |     2 |     2 |     1 | text2 |
|     3 |     1 |     2 |     2 | text3 |
+-------+-------+-------+-------+-------+
Таблица: tbl_5
+-------+-------+-------+-------+-------+-------+
|rep_id |com2_id|com_id||post_id| nm_id | text  |
+-------+-------+-------+-------+-------+-------+
|     1 |  null |     1 |     1 |     1 | text1 |
|     2 |  null |  null |     1 |     1 | text2 |
+-------+-------+-------+-------+-------+-------+

То, что я пытался

Мне нужно получить все значения, но идея состоит в том, чтобы исключить значения из tbl_5 от результата. Пока что я делаю:

  1. выберите tbl_2, затем присоединитесь tbl_1 к nm_id, затем исключите tbl_5 к post_id -> 1stVariable
SELECT tbl_2.*, name.tbl_1
FROM tbl_2
INNER JOIN tbl_2 ON tbl_1.nm_id = tbl_2.nm_id
LEFT JOIN tbl_5 ON tbl_2.post_id = tbl_5.post_id
WHERE tbl_2.post_id = *variable* AND tbl_5.rep_id IS NULL
выберите tbl_3, затем присоединитесь tbl_2 к com_id, затем присоединитесь tbl_1 к nm_id, исключите tbl_5 на com_id -> 2ndVariable
SELECT tbl_3.*, name.tbl_1
FROM tbl_3
INNER JOIN tbl_3 ON tbl_1.nm_id = tbl_3.nm_id
LEFT JOIN tbl_5 ON tbl_3.com_id = tbl_5.com_id
WHERE tbl_3.com_id = *variable* AND tbl_5.rep_id IS NULL
выберите tbl_4, затем присоединитесь tbl_1 в nm_id исключите tbl_5 в com2_id -> 3-я переменная
SELECT tbl_4.*, name.tbl_1
FROM tbl_4
INNER JOIN tbl_4 ON tbl_1.nm_id = tbl_4.nm_id
LEFT JOIN tbl_5 ON tbl_4.com2_id = tbl_5.com2_id
WHERE tbl_4.com2_id = *variable* AND tbl_5.rep_id IS NULL

Мой текущий выход JSON

{
  post:{...},
  com:{...},
  com2:{...}
}

Необходим JSON output

В результате my. js становится таким длинным и сложным с тремя разделенными массивами. Я пытался получить все в 1-й переменной, но я не могу понять, как получить массив в массиве:

{
   post: {
     post_id: "post_id",
     name: "name",
     com: {
       com_id:"com_id",
       com:"com",
       name:"name",
       com2:{
         com2_id:"com2_id",
         com2:"com2",
         name:"name",
         }
      },
   }
}

Я действительно надеюсь, что это понятно. Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2020

Я бы ожидал запрос, подобный следующему:

select . . .    -- columns you want
from . . .      -- joins among the first four tables
where not exists (select 1
                  from table_5 t5
                  where . . .    -- conditions that match table 5 to the other tables
                 );

Я могу предположить, что ваши условия выглядят примерно так:

where not exists (select 1
                  from table_5 t5
                  where t5.com_id = t4.com_id and
                        t5.post_id = t2.post_id and
                        t5.nm_id = t1.nm_id
                 )

, но ваш вопрос не ясен в отношении таблиц соответствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...