首页 > 解决方案 > MYSQL - 如何在无组织的表中获取丢失的记录

问题描述

我在 MYSQL 中有下表,它的组织方式不是最好的,但我必须这样处理。

细节

id INTEGER PRIMARY KEY
plant_id INTEGER FOREIGN KEY
state VARCHAR
county VARCHAR
municipality VARCHAR
count INTEGER

每条记录都包含在一个州、一个县或一个市镇中存在多少特定植物标本的计数。

一个州的工厂的样本计数记录的县和市字段等于 NULL。县中的植物计数记录具有包含其所属州名称的州字段(没有外键)和等于 NULL 的自治市字段。市内植物的标本计数记录有包含各自名称的州和县字段(没有外键)。

我应该检查我有哪些县的总计数,但我没有任何市政计数记录。我曾想过以以下方式创建 LEFT OUTER JOIN,左表与县计数,右表与市计数,但不幸的是它不起作用。

SELECT d1.*, d2.*
FROM details AS d1 
LEFT OUTER JOIN details AS d2 
ON (d1.id != d2.id 
    AND d1.plant_id = d2.plant_id 
    AND d1.county = d2.county 
    AND d1.county IS NOT NULL 
    AND d1.municipality IS NULL
    AND d2.municipality IS NOT NULL
   )
WHERE d2.id IS NULL

谢谢

标签: mysql

解决方案


试试这个,因为我通常在 MSSQL 上工作,可能会有一些语法错误,但我认为这应该对你有所帮助。

SELECT  d1.*
FROM    details AS d1 
WHERE   d1.county IS NOT NULL AND d1.municipality is NULL
        AND NOT EXISTS(
            SELECT  * 
            FROM    details d2
            WHERE   d2.plant_id = d1.plant_id AND d2.county = d1.county AND d2.municipality IS NOT NULL
        )

推荐阅读