MySQL-使用LEFT JOIN表显示数据,但不显示连接数据的结果

时间:2018-09-11 15:37:47

标签: mysql database

我有两个用于mySQL数据库的表,分别是applicantsapplicant_childrensapplicants表包含父母及其子女的用户详细信息。 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 :(得分:1)

您可以在下面的查询中尝试-

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)

答案 1 :(得分:0)

您需要澄清您的预期结果:您为什么期望Zack(ic=1234)出现,而不是Nur或Aisya?这3个用户中的任何一个都不在您的applicant_childrens表中的任何位置。从我理解您的逻辑的角度来看,似乎只有阿姆兰的名字应该出现。

我认为您首先需要从applicant_children中进行选择,然后两次LEFT JOIN进入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

请注意,您的applicants表中的记录2不会出现。同样,您需要澄清为什么会这样。