我有两个用于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
答案 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不会出现。同样,您需要澄清为什么会这样。