SQL/SQLite:尽管使用了DISTINCT

SQL/SQLite:尽管使用了DISTINCT,sql,sqlite,distinct,Sql,Sqlite,Distinct,我在表“adr”中有大约8000个条目,希望将其与其他一些表连接起来。然而,尽管使用了DISTINCT,这仍然会产生200k+的结果。这里的罪魁祸首是“stort”,因为第二个查询按预期工作。然而,我不知道第一个有什么不对。是双重身份证吗 20万以上的结果: SELECT DISTINCT str.name, adr.hausnummer, stort.name, plz.postleitzahl, adr.PKUID FROM adresse adr, strasse str, gemeind

我在表“adr”中有大约8000个条目,希望将其与其他一些表连接起来。然而,尽管使用了DISTINCT,这仍然会产生200k+的结果。这里的罪魁祸首是“stort”,因为第二个查询按预期工作。然而,我不知道第一个有什么不对。是双重身份证吗

20万以上的结果:

SELECT DISTINCT str.name, adr.hausnummer, stort.name, plz.postleitzahl, adr.PKUID
FROM adresse adr, strasse str, gemeinde gem, stadt_ortsteil stort, postleitzahl plz
WHERE adr.strasse_id = str.strasse_id 
AND adr.postleitzahl_id = plz.postleitzahl_id 
AND str.gemeinde_id = gem.gemeinde_id 
AND gem.gemeinde_id = stort.gemeinde_id
结果:

SELECT DISTINCT str.name, adr.hausnummer, gem.name, plz.postleitzahl, adr.PKUID
FROM adresse adr, strasse str, gemeinde gem, postleitzahl plz
WHERE adr.strasse_id = str.strasse_id 
AND adr.postleitzahl_id = plz.postleitzahl_id 
AND str.gemeinde_id = gem.gemeinde_id

我发现排除DISTINCT或GroupBy选项故障的一个好方法是使用GROUPBY设置查询,然后放置HAVING子句以查找重复项。这可以为大型数据集提供一些线索。在本例中,我们将检查Stort.name的重复项,但您可以对其他字段执行相同的操作:

SELECT str.NAME, adr.hausnummer, count(stort.NAME) StortDuplicates, plz.postleitzahl, adr.PKUID
FROM adresse adr, strasse str, gemeinde gem, stadt_ortsteil stort, postleitzahl plz
WHERE adr.strasse_id = str.strasse_id
    AND adr.postleitzahl_id = plz.postleitzahl_id
    AND str.gemeinde_id = gem.gemeinde_id
    AND gem.gemeinde_id = stort.gemeinde_id
GROUP BY str.NAME, adr.hausnummer, stort.NAME, plz.postleitzahl, adr.PKUID
HAVING (COUNT(stort.NAME) > 1)

嗯,那什么也不回。上面的第一个查询将每个str.name和adr.hausnumer与每个可用的stort.name连接起来。所以基本上
(str,adr,stort:)1,1,1;第一,第一,第二;第一,第一,第三;第一,第一;第四个
等等..这些表之间的关系是什么?从第一个查询中的何处开始:
FK-PK,FK-PK,FK-PK,PK-FK