mySQL - отображение данных с таблицей LEFT JOIN, но без отображения результатов связанных данных - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть 2 таблицы для базы данных mySQL, которая applicants и applicant_childrens. Таблица applicants содержит сведения о пользователе как для родителей, так и для их детей. applicant_childrens - это таблица соединений для связи родителей и детей. Ниже приведены подробности таблиц.

соискатели

id | name  | ic   | address
----------------------------
1  | Amran | 5115 | KL
2  | Zack  | 1234 | KL
3  | Nur   | 1156 | Sel
4  | Aisya | 8701 | Sabah

applicant_childrens

id | ic_parent | ic_chidlren 
----------------------------
1  | 5115      |  1156
2  | 5115      |  8701  

У меня вопрос: как я хочу выбрать данные, которые отображают все детали заявителей в таблице присоединения, но без указания имени детей? Например, таблица, которую я хочу:

id | name  | ic   | address | id | ic_parent | ic_children
----------------------------------------------------------
1  | Amran | 5115 | KL      | 1  | 5115      | 1156
1  | Amran | 5115 | KL      | 2  | 5115      | 8701
2  | Zack  | 1234 | KL

На данный момент я получаю следующий результат:

SELECT * FROM `applicants` ap 
LEFT JOIN applicant_childrens ac 
ON ap.ic=ac.ic_parent

id | name  | ic   | address | id | ic_parent | ic_children
----------------------------------------------------------
1  | Amran | 5115 | KL      | 1  | 5115      | 1156
1  | Amran | 5115 | KL      | 2  | 5115      | 8701
2  | Zack  | 1234 | KL
3  | Nur   | 1156 | Sel
4  | Aisya | 8701 | Sabah

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы можете попробовать ниже запрос -

SELECT * FROM applicants ap 
LEFT JOIN applicant_childrens ac
ON ap.ic=ac.ic_parent
WHERE ap.ic NOT IN (SELECT ic_children FROM applicant_childrens)
0 голосов
/ 11 сентября 2018

Вам необходимо уточнить ожидаемые результаты: почему вы ожидаете, что появится Зак (ic=1234), а не Нур или Айся?Никто из этих 3-х пользователей нигде в вашей таблице applicant_childrens.Из того, как я понимаю твою логику, может показаться, что должно появиться только имя Амрана.

Я думаю, вам нужно начать с выбора с applicant_children, а затем с LEFT JOIN ing до applicants дважды: один раз для родителя и один раз для родителя.

Делая что-то вроде этого:

SELECT
    parent.`id` AS applicant_id,
    parent.`name`,
    parent.`ic`,
    parent.`address`,
    ac.`id` AS ac_id,
    parent.`ic` AS ic_parent,
    child.`ic` AS ic_children
FROM applicant_childrens ac
    LEFT JOIN applicants parent ON
        parent.ic = ac.ic_parent
    LEFT JOIN applicants child ON
        child.ic = ac.ic_children

дает такие результаты:

applicant_id name   ic      address ac_id ic_parent   ic_children
1            Amran  5115    KL      1     5115        1156
1            Amran  5115    KL      2     5115        8701

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

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