如何通过JOIN SQL生成额外行?1对多关联表查询需求
实现方法
根据你的需求,分两种常见场景给出SQL实现方案:
场景1:仅查询无对应House记录的Person
如果你需要找出那些没有关联任何House的Person,同时House列显示为空,可用以下两种方法:
方法1:左连接(LEFT JOIN)+ 筛选
SELECT p.*, NULL AS House FROM Person p LEFT JOIN House h ON p.id = h.person_id WHERE h.person_id IS NULL;
左连接会保留所有Person记录,通过WHERE h.person_id IS NULL筛选出House表中无匹配的Person,同时将House列设为NULL。
方法2:NOT EXISTS子查询
SELECT p.*, NULL AS House FROM Person p WHERE NOT EXISTS ( SELECT 1 FROM House h WHERE h.person_id = p.id );
直接检查当前Person在House表中是否存在关联记录,不存在则返回结果,同时House列设为NULL。
场景2:查询所有Person,强制House列为空
如果不管Person是否有对应的House,都要显示所有Person记录且House列统一为空,无需关联House表,直接查询即可:
SELECT p.*, NULL AS House FROM Person p;
内容的提问来源于stack exchange,提问作者duy
相关产品推荐
相关产品推荐

