SQL-die Rückkehr der rownum einer bestimmten Zeile? (mit Oracle-db)
In Oracle 10g habe ich diese SQL:
select dog.id as dogId from CANINES dog order by dog.codename asc
gibt:
id
--
204
203
206
923
Möchte ich erweitern Sie diese Abfrage, um zu bestimmen, die oracle-rownum von einem Hund.id in diesem resultset.
Habe ich versucht
select rownum from
(select dog.id as dogId from CANINES dog order by dog.codename asc)
where dog.id=206
Aber das funktioniert nicht sehr gut (es gibt 1 zurück, egal welcher Hund.id, die ich auf passen). Ich hatte erwartet, um wieder 3.
Vielen Dank für Ihre Hilfe!
Hinweise
http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
Ich bin mir ziemlich sicher, dass ich Sie nicht verwenden müssen rowid
InformationsquelleAutor jedierikb | 2009-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, was Sie wollen, ist zu verwenden eine analytische Funktion (RANG
DENSE_RANK
oderROW_NUMBER
), d.h.Wenn die ID-Spalte in die die ECKZÄHNE Tisch waren nicht eindeutig, RANG,
DENSE_RANK
, undROW_NUMBER
) würde behandeln Beziehungen anders.Wenn Sie möchten, tun dies ausschließlich mit ROWNUM,
InformationsquelleAutor Justin Cave
Wenn Sie nach den eindeutigen Bezeichner für jede Zeile in der Tabelle, die Sie benötigen ROWID, nicht ROWNUM.
ROWNUM ist eine pseudospalte handelt, die sich ändern können, jedes mal ein bisschen SQL ausgeführt wird (es hat sich zum Zeitpunkt der Abfrage)
Im ernst, halten Sie sich an die OP. Können Sie beantworten, was Sie wollte, Sie zu Fragen, nachdem Sie befassen sich mit der OP.
InformationsquelleAutor cagcowboy
Sehen, ob das funktioniert für Sie:
Antwort
Ergebnisse
DDL
Ah, dann ist dieser Ansatz nicht funktioniert. Aber Sie sollten in der Lage sein, um die "rownum" - Funktion in Oracle, um den gleichen pseudo rownumber.
Sie können das gleiche tun, was viel einfacher in Oracle. "wählen Sie dogID, DogName, rownum from #ids, um durch DogName" liefert das gleiche Ergebnis wie die group-by-Abfrage, sondern führt viel besser.
sind Sie eine lange Zeit in SQL Server oder MySql Kerl? Ich glaube, dass Sie nicht haben, rownum, bis vor kurzem. Schlagen Sie die Tabelle zweimal ist eine riesige performance-Einbußen im Vergleich mit nur einmal.
Stimmt, ich benutze hauptsächlich MSSQL. Aber ich versuche auch die Verwendung von ANSI-SQL-standard, wenn möglich. "rownum" ist nicht tragbar. Die Treffer dürfen nicht so groß sein, je nachdem, wie viele Zeilen es gibt und wenn die Tabelle ist korrekt indiziert.
InformationsquelleAutor beach
Um dies zu erreichen, wäre es am besten, zu ändern, die Tabelle und fügen Sie eine Sequenz. Das könnte klebrig, wenn Sie beabsichtigen, löschen von Zeilen. Wo vielleicht eine bessere Praxis wäre, um eine status-Spalte oder-und start-Ende-Datum-Motiv zu entscheiden, welche Zeilen aktiv sind und zurückgegeben werden sollen.
InformationsquelleAutor goofy