在同一张表中查询指定子项的父项信息 [SQL]
如何通过子项标题查询自关联表的父项信息?
你的问题出在没有对主表添加过滤条件,原SQL会返回表中所有记录的关联结果。要实现根据指定子项标题查询其父项,只需要在原语句基础上添加针对主表a的WHERE条件即可。
方案1:获取子项及其父项的完整信息
如果你想同时看到子项本身的信息和对应的父项内容,修改后的SQL如下:
SELECT a.nom_ele_id, a.nom_ele_title, b.nom_ele_title AS 'nom_parent' FROM `immo_nomenclature_element` AS a LEFT JOIN `immo_nomenclature_element` AS b on a.`nom_ele_parent_id` = b.`nom_ele_id` WHERE a.nom_ele_title = "type de sol"
执行后会返回:
+-----------+-----------------+-----------+ |nom_ele_id | nom_ele_title | nom_parent| +===========+=================+===========+ | 6957 | type de sol | SOL | +-----------+-----------------+-----------+
方案2:仅获取父项的信息
如果只需要父项的ID和标题,不需要子项数据,可以简化查询:
SELECT b.nom_ele_id AS parent_id, b.nom_ele_title AS nom_parent FROM `immo_nomenclature_element` AS a INNER JOIN `immo_nomenclature_element` AS b ON a.nom_ele_parent_id = b.nom_ele_id WHERE a.nom_ele_title = "type de sol"
这里用INNER JOIN代替LEFT JOIN更合适,因为子项必然有父项(根据你的数据示例),这样只会返回存在关联的父项记录。
为什么原SQL会返回全表?
原SQL没有添加WHERE条件时,LEFT JOIN会将表中每一条记录都和其父项进行关联,所以返回了所有行的结果。添加WHERE a.nom_ele_title = "type de sol"后,只会筛选出子项为"type de sol"的记录,再关联对应的父项数据。
内容的提问来源于stack exchange,提问作者GuiEpi
相关产品推荐
相关产品推荐

