Je ne parviens pas à comprendre cela. La requête ci-dessus compte les enregistrements en double des profils (pour lesquels les artefacts ont plusieurs enregistrements). Quand je lance la requête ci-dessus avec distinct, j'obtiens le compte correct qui est ci-dessous.Pourquoi une requête dans les résultats de la requête dans des enregistrements en double
SELECT COUNT(DISTINCT(id)) FROM profiles
WHERE profiles.status IN ('abc', 'man')
AND profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill'
);
count
-------
12157
(1 row)
Les artefacts peuvent avoir plusieurs enregistrements pour le même profil. Mais selon ma compréhension IN
requête ne laissera aucun profil en double à venir en compte. Ai-je raison? ou y a-t-il quelque chose qui me manque?
MISE À JOUR:
j'ai essayé de réduire la requête 2 conditions de filtrage différentes. Les deux conditions fonctionnent bien. Veuillez trouver ci-dessous.
=> SELECT COUNT(*) FROM profiles WHERE profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill');
count
-------
22664
(1 row)
=> SELECT COUNT(DISTINCT(id)) FROM profiles WHERE profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill');
count
-------
22664
(1 row)
=> SELECT COUNT(DISTINCT(id)) FROM profiles
WHERE profiles.status IN ('abc', 'man');
count
-------
20109
(1 row)
=> SELECT COUNT(*) FROM profiles
WHERE profiles.status IN ('abc', 'man');
count
-------
20109
Donc, la duplication se produit lorsque deux IN
requêtes utilisées dans conjuction. Quelqu'un connaît-il ce cas d'utilisation?
Voici une question stupide - avez-vous des doublons dans la table des profils? – paqash
@paqash Pas possible. Id est la clé primaire. – dnsh
essayez d'exécuter 'SELECT id FROM profils ... sauf SELECT distinct id FROM profiles..' pour obtenir la liste de" not distinct id "? .. –