Sah ein Kollege eine Abfrage heute ausführen und ich konnte nicht erklären, warum oder wie es nicht scheitern. Die Abfrage wurde (abstrahiert):Warum wird eine Abfrage mit einem ungültigen Subselect ausgeführt?
UPDATE table1
SET columnToUpdate = 1
WHERE recordID IN (
SELECT recordID FROM table2 WHERE table2column IN (*list of values*))
Das Problem war, er irrt recordID hatte, die nur in table1 ist, für personID, die in beiden Tabellen vorhanden ist, und ist eine PK in Tabelle 1, FK in Tabelle 2.
Ich hätte gedacht, die Abfrage würde nicht ausgeführt werden, da der Subselect nicht aufgelöst werden kann (tatsächlich, wenn Sie den Subselect allein ausführen, schlägt es fehl). Stattdessen führte das Ausführen der obigen Abfrage alle Datensätze in Tabelle1, die zuvor eine Kombination aus NULL und 0 waren, aus.
Es war einfach zu beheben, aber kann jemand erklären, warum dieses Verhalten stattfinden würde?
Danke!
verwendet wird, was Sie meinen, innerer Auserwählter scheitern? Sie meinen, Ihnen einen Fehler geben oder Null zurückgeben? –
So funktionieren korrelierte Unterabfragen. Sicher ist es einfach zu beheben, aber wenn Sie Ihre Programmiergewohnheiten ändern, um IMMER die Tabelle vor Ihren Spalten anzugeben, werden Sie diese Art von Fehlern stark minimieren. –