Frage

Wenn ich SQL-Abfragen zu schreiben, finde ich mich oft denkt, dass „es gibt keine Möglichkeit, dies mit einer einzigen Abfrage zu tun“. Wenn das passiert ich gespeicherte Prozeduren oft drehen oder mehrere Anweisungen Tabellenwertfunktionen, die temporären Tabellen verwenden (von einer oder anderen Art) und einfach die Ergebnisse am Ende kombiniert und die Ergebnistabelle zurück.

Ich frage mich, ob jemand weiß, einfach als eine Frage der Theorie, sei es sollte möglich sein, jede Abfrage zu schreiben, die ein einzelnes Ergebnis als eine einzelne Abfrage (nicht mehr Anweisungen) gesetzt zurückzugibt. Offensichtlich ich ignoriere relevante Punkte wie Code-Lesbarkeit und Wartbarkeit, vielleicht sogar die Abfrageleistung / Effizienz. Dies ist mehr über Theorie - es kann getan werden ... und keine Sorge, ich plane sicher nicht zwingen, mich zu beginnen, eine Single-Anweisung Abfrage zu schreiben, wenn Multi-Statement besser wird mein Ziel in allen Fällen gerecht, aber es könnte mich auf zweimal oder ein bisschen mehr denken, ob es ein gangbarer Weg ist das Ergebnis von einer einzigen Abfrage zu erhalten.

Ich denke, ein paar Parameter in Ordnung ist - ich bin eine relationale Datenbank zu denken (wie MS SQL) mit Tabellen, die gemeinsame Best Practices (wie alle Tabellen einen Primärschlüssel mit und so weiter) folgen

Hinweis: (. Bezugnahme auf Bahnmaterial oder etwas ähnliches), um ‚akzeptierte Antwort‘ auf diese zu gewinnen, werden Sie einen endgültigen Beweis zur Verfügung stellen müssen

War es hilfreich?

Lösung

Zumindest bei der eine aktuelle Version von Oracle ist absolut möglich. Es hat eine ‚Modell-Klausel‘, die SQL-Turing komplett macht. (

Andere Tipps

Ich glaube, es ist möglich. Ich habe mit sehr schwierigen Anfragen gearbeitet, sehr langen Abfragen und oft ist es möglich, es mit einer einzigen Abfrage zu tun. Aber die meiste Zeit ist es schwieriger zu mantain, also wenn Sie es mit einer einzigen Abfrage zu tun, stellen Sie sicher, dass Sie Ihre Anfrage Kommentar sorgfältig.

Ich habe noch nie etwas begegnet, die nicht in einer einzigen Abfrage getan werden könnte.
Aber manchmal ist es am besten, es in mehr als eine Abfrage zu tun.

Ich kann es nicht beweisen, aber ich glaube, die Antwort ein vorsichtiges ja ist - vorausgesetzt, Ihr Datenbank-Design richtig gemacht wird. In der Regel gezwungen, mehr Erklärungen zu schreiben, um ein bestimmtes Ergebnis zu bekommen, ist ein Zeichen dafür, dass Ihr Schema einige Verbesserungen benötigen.

In der Theorie ja, wenn Sie verwenden Funktionen oder eine quälende Labyrinth von OUTER applys oder Unterabfragen; jedoch aus Gründen der Lesbarkeit und Leistung haben wir immer am Ende mit temporären Tabellen gehen und mit mehreren Anweisungen gespeicherte Prozeduren.

Als jemand oben ausgeführt, ist dies in der Regel ein Zeichen dafür, dass Ihre Datenstruktur zu riechen beginnt; nicht, dass es schlecht , aber das ist es vielleicht Zeit für Performance-Gründen denormalise (passiert den Besten von uns), oder vielleicht eine denormalised abfragenden Schicht vor dem normalisierten „echten“ Daten setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top