Ich habe versucht, eine Abfrage auf data.stackexchange.com, die mir die Antwort auf die Frage geben würde, was der Prozentsatz der Benutzer, die Beiträge geschrieben haben, die über 1000 angesehen wurden Zeiten und wer Abzeichen einer bestimmten Klasse besitzen.Single UND Bedingung gibt die gleiche Ausgabe wie WHERE Bedingung
Problem: Wenn ich AND ViewCount > 1000
schreiben bekomme ich das gleiche Ergebnis wie WHERE ViewCount > 1000
Ich verstehe nicht, warum es
Die Abfrage mit WHERE passiert:
SELECT
TOP 1000
Class, (Count(Badges.UserId)* 100/(SELECT COUNT(*) From Badges)) AS Percentage
FROM Badges
WHERE Badges.UserId IN (SELECT Posts.OwnerUserId FROM Posts
INNER JOIN
Badges ON Posts.OwnerUserId = Badges.UserId
WHERE ViewCount > 1000)
GROUP BY Class
ORDER BY Class
Die Abfrage mit AND:
SELECT
TOP 1000
Class, (Count(Badges.UserId)* 100/(SELECT COUNT(*) From Badges)) AS Percentage
FROM Badges
WHERE Badges.UserId IN (SELECT Posts.OwnerUserId FROM Posts
INNER JOIN
Badges ON Posts.OwnerUserId = Badges.UserId
AND ViewCount > 1000)
GROUP BY Class
ORDER BY Class
Ausgabe (aus irgendeinem Grund ist es das gleiche in b oth Fälle):
Klasse 1 - 2 Prozent
2 Klasse - 15 Prozent
3 Klasse - 45 Prozent
Könnten Sie Tabellendefinitionen zu Ihrer Frage hinzufügen? –
Ich denke, es ist offensichtlich, weil Sie INNER JOIN verwenden, so wird es das gleiche Ergebnis sowohl in AND, WHERE-Bedingung zurückgeben, aber es kann sich in LINKEN VERBINDUNG anders verhalten und unterschiedliche Ergebnismenge zurückgeben. – Susang
Könnten Sie bitte erläutern, welche Art von logischen Kollision Sie hier sehen? –