ich eine Abfrage wie folgt ausgeführt werden:Wie kann ein SELECT mit einem zusätzlichen UND-Begriff mehr Zeilen ergeben als ohne?
SELECT distinct me.*
FROM me
LEFT JOIN has_things ON has_things.me_id = me.id
LEFT JOIN has_refs ON has_refs.thing_id = has_things.thing_id
WHERE
has_refs.ref_id = 456
AND me.id=123;
In der ersten Variante, ich die letzte Zeile AND me.id = 123
und bekommen 0 Zeilen, während in der zweiten Variante auslassen ich diese Zeile enthalten und 1 Reihe bekommen.
In einer anderen Variante, in der die letzte Zeile AND me.id >= 123
ist, bekomme ich 0 Zeilen.
Ich verwende psql
, um die Datenbank abzufragen.
Was fehlt mir und wie kann ich das beheben? Ich dachte, AND
Bedingungen können nur die Anzahl der Übereinstimmungen reduzieren.
Kennt jemand solche PostgreSQL Bugs wo Zeilen einfach verschwinden oder verschwinden, vielleicht mit Links zu Bugtickets oder so?
Scheint meine andere Frage bezogen werden:
How can PDO not return a row which pg_query() does?
Welcher Datentyp ist 'me.id'? Können Sie ein komplettes Testsetup zur Verfügung stellen, um dies zu reproduzieren? Zeigt der Ausführungsplan eine Indexsuche für diese Spalte an? Wenn ja, hilft die Neuerstellung des Index? –
Es ist wahrscheinlich in Kombination mit dem, was Sie in Ihrem LINKEN JOIN und den übrigen Teilen von WHERE –
'me.id' vom Typ' serial NOT NULL' haben. Wir werden versuchen, den Index während der Nachtstunden, wo die Last niedrig ist, neu zu erstellen. Ich aktualisierte meine Abfrage mit der echten, die ich minimieren konnte, während ich immer noch die gleichen Ergebnisse produzierte. Für mich ist der 'JOIN' Look völlig unverdächtig. – Archimedix