Sollte ich Oben(1) in einer Unterabfrage

Beispiel-Query:

select * 
from A join B on A.ID = B.SOMEVALUE
where A.VALUE="something" and
B.ID = 
       (select ID from B where SOMEVALUE = A.ID and 
              THISDATE = (select max(SOMEDATE) from B where ...))

so, wenn man Lesen kann SQL sollten Sie sehen, dass ich Tue, ein paar korrelierte Unterabfragen, um die Ergebnisse einzugrenzen, die mitmachen . (und ja, das ist furchtbar stark vereinfacht).

In bestimmten Fällen die Unterabfrage:

select ID from B where SOMEVALUE = A.ID and 
    THISDATE = (select max(SOMEDATE) from B where ...)

kann wieder mehr als 1 Wert, der einen Fehler verursacht

"Unterabfrage hat mehr als 1 Wert.
Dies ist nicht zulässig, wenn die
Unterabfrage folgt =, !=, <, <= , >, >=
oder wenn die Unterabfrage verwendet wird, wie eine
Ausdruck."

die ich voll erwarten. Dies ist offensichtlich nicht eine gute Sache, und ich habe den code in Ort, um (hoffentlich) zu verhindern, dass diese Duplikate in der Datenbank an Erster Stelle (ie der Tabelle B sollte nur 1 Zeile entspricht der

SOMEVALUE = A.ID and max(SOMEDATE)

Kriterien), jedoch sind die Endbenutzer nichts, wenn nicht kreative Wege finden, wie ich kann nicht glauben, brechen software.

So, jetzt zu meiner Frage:

Wäre es besser, ändern Sie die erste Unterabfrage, um

select top 1 * from B ...

zu verhindern, dass die Benutzer sehen eine Fehlermeldung, wenn/wenn (hoffentlich nie) diese situation entsteht, oder lassen Sie den Fehler durch zu kommen. Ich bin Neigung zu nicht hinzufügen die top-Anweisung, und lassen Sie den Fehler durch gekommen, eher dann lassen die Benutzer sehen möglicherweise falsche Daten. Ich Frage mich, ob jemand irgendwelche Gedanken über die Besten Praktiken in einer situation wie dieser...

InformationsquelleAutor pfunk | 2009-01-30

Schreibe einen Kommentar