2011-01-12 16 views
1

Ich konvertiere eine DB von Access zu SQLite und muss daher auch alle SQL-Abfragen konvertieren/debuggen. Kam über dieses eine:Was ist äquivalent zu Access '' SELECT DISTINCTROW * FROM ... 'in SQLite?

SELECT DISTINCTROW * FROM table WHERE column = value ORDER BY column2; 

Was ist die äquivalente Abfrage mit SQLite?

+0

Ist dies zufällig SQL aus einer Access App, die älter als Access 95 ist? In Access 2 und davor war SELECT DISTINCTROW der Standardwert für alle SELECTs. –

+0

Nicht sicher. Es ist nur an einer Stelle in der App, die die DB verwendet. und die DB, mit der ich getestet habe, war Access 95. Möglicherweise, aber. –

+0

Versteht mich nicht falsch: DISTINCTROW ist großartig und löst viele Probleme mit der Bearbeitung. Aber es ist sicherlich Nicht-Standard-SQL, und sollte nur verwendet werden, wenn Sie Probleme lösen und bearbeiten müssen. –

Antwort

3
SELECT DISTINCT * FROM table WHERE column = value ORDER BY column2; 

Da gibt es nur einen Tisch beteiligt, DISTINCTROW wirkt wie DISTINCT.

+3

... und ist wahrscheinlich in diesem Zusammenhang nicht von Nutzen. Wenn Sie mehrere Datensätze haben, bei denen jeder einzelne Wert mit den Werten in einem anderen Datensatz identisch ist, haben Sie schlechte Daten und sollten sich fragen, warum Sie alle diese doppelten Datensätze in einer Tabelle haben, in der Sie DISTINCT verwenden. Wenn die Tabelle einen Primärschlüssel hat, sollten Sie SELECT ohne Schlüsselwort verwenden, da SELECT DISTINCT nichts anderes als SELECT selbst zurückgibt. –

+0

@ David-W-Fenton Direkt auf das Geld, gibt es eine Möglichkeit für ein Datenbank-Design, das vielleicht nicht auf Augenhöhe ist. Vielleicht ist diese Übertragung von Access zu SQLite Teil eines Bereinigungsprozesses der Daten hin zu einem hoffentlich besseren Schema? – MPelletier

+0

Leider für jetzt, nein. Das Hauptaugenmerk des Projekts liegt auf der Konvertierung der App, die die DB verwendet, aber die Neugestaltung der DB ist noch nicht Teil des Plans. Vielleicht in der Zukunft. Wäre nett. –

1

Das Äquivalent ist, um sicherzustellen, dass alle Ihre Tabellen Schlüssel haben und Sie Joins und den Rest Ihrer Abfrage korrekt implementieren. Wenn Sie das tun, werden Sie nie etwas wie DISTINCTROW brauchen. DISTINCTROW ist nicht mehr als nur ein Vermächtnis der Albernheit von Jet.

SELECT * ist eine schlechte Übung. Listen Sie die Spalten nach Namen auf.

SELECT column, column1, column2 
FROM table 
WHERE column = value 
ORDER BY column2;