1153 Stimmen

Eine Spalte ausschließen mit SELECT * [except columnA] FROM tableA?

Wir alle wissen, dass wir alle Spalten einer Tabelle auswählen können, wenn wir

SELECT * FROM tableA

Gibt es eine Möglichkeit, Spalten aus einer Tabelle auszuschließen, ohne dass alle Spalten angegeben werden müssen?

SELECT * [except columnA] FROM tableA

Die einzige Möglichkeit, die ich kenne, besteht darin, alle Spalten manuell anzugeben und die unerwünschte Spalte auszuschließen. Das ist sehr zeitaufwändig, daher suche ich nach Möglichkeiten, Zeit und Mühe zu sparen, und auch für die künftige Wartung, wenn die Tabelle mehr oder weniger Spalten hat.

59 Stimmen

Es wäre sehr praktisch, diese Funktion zu haben, nicht um sie in den Produktionscode einzubauen, sondern für die Fehlersuche. Beispiel: Ich habe eine Tabelle mit mehreren Spalten, die ich abfrage, aber ich möchte schnell eine oder zwei Textspalten auslassen.

0 Stimmen

Ich brauchte dies, als ich mit openquery arbeitete (obwohl ich die Funktionalität in MySQL und nicht in SQL Server benötigte). Ich musste eine MySQL-Datenbank mit SQL Server abfragen. Da eine MySQL-Tabelle Char-Spalten mit fester Breite hatte, konnte ich keine SELECT * Abfrage (OLE DB hat Probleme, diese zuzuordnen). Ich konnte die richtigen Spalten nicht angeben, da ich keinen direkten Zugriff auf die MySQL-Datenbank hatte, aber SQL Server war so freundlich, mir die Namen der Char-Spalten mit fester Breite mitzuteilen...

9 Stimmen

Ich möchte noch einen weiteren Grund hinzufügen, dies zu tun: SELECT DISTINCT * außer für die Schlüsselspalte, damit sie ohne doppelte Zeilen funktioniert, die jemand anderes erstellt hat

8voto

cjk Punkte 44394

In SQL Management Studio können Sie die Spalten im Objekt-Explorer erweitern und dann die Columns Baumelement in ein Abfragefenster, um eine durch Komma getrennte Liste von Spalten zu erhalten.

7voto

Mahesh Madushanka Punkte 2756

Der beste Weg, dies zu lösen ist mit Ansicht können Sie Ansicht mit erforderlichen Spalten erstellen und Daten abrufen Form es

example

mysql> SELECT * FROM calls;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  1 | 2016-06-22 |       1 |
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  4 | 2016-06-23 |       2 |
|  5 | 2016-06-23 |       1 |
|  6 | 2016-06-23 |       1 |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
7 rows in set (0.06 sec)

mysql> CREATE VIEW C_VIEW AS
    ->     SELECT id,date from calls;
Query OK, 0 rows affected (0.20 sec)

mysql> select * from C_VIEW;
+----+------------+
| id | date       |
+----+------------+
|  1 | 2016-06-22 |
|  2 | 2016-06-22 |
|  3 | 2016-06-22 |
|  4 | 2016-06-23 |
|  5 | 2016-06-23 |
|  6 | 2016-06-23 |
|  7 | 2016-06-23 |
+----+------------+
7 rows in set (0.00 sec)

7voto

AlexandreWL Punkte 61

Wenn wir von Prozeduren sprechen, funktioniert es mit diesem Trick, eine neue Abfrage zu erstellen und SOFORT AUSFÜHREN es:

SELECT LISTAGG((column_name), ', ') WITHIN GROUP (ORDER BY column_id)
INTO var_list_of_columns
FROM ALL_TAB_COLUMNS
WHERE table_name = 'PUT_HERE_YOUR_TABLE'
AND column_name NOT IN ('dont_want_this_column','neither_this_one','etc_column');

7voto

Shrage Smilowitz Punkte 22718

Zusammenfassend lässt sich sagen, dass Sie es nicht tun können, aber ich stimme nicht mit allen obigen Kommentaren überein, es "gibt" Szenarien, in denen Sie rechtmäßig ein * verwenden können Wenn Sie eine geschachtelte Abfrage erstellen, um einen bestimmten Bereich aus einer ganzen Liste auszuwählen (z. B. Paging), warum in aller Welt sollten Sie dann jede Spalte in der äußeren Select-Anweisung angeben, wenn Sie dies bereits in der inneren getan haben?

7voto

onedaywhen Punkte 52850

Gibt es eine Möglichkeit, Spalten aus einer Tabelle auszuschließen? alle Spalten anzugeben?

Mit deklarativem SQL in der üblichen Weise, nein.

Ich denke, die von Ihnen vorgeschlagene Syntax ist würdig und gut. In der Tat hat die relationale Datenbanksprache "Tutorial D" eine sehr ähnliche Syntax, bei der die Schlüsselwörter ALL BUT gefolgt von einer Reihe von Attributen (Spalten).

Allerdings ist SQL SELECT * bereits eine Menge Kritik einstecken muss (@Guffas Antwort hier ist ein typischer Einwand), daher glaube ich nicht, dass SELECT ALL BUT in absehbarer Zeit in den SQL-Standard aufgenommen wird.

Ich denke, die beste Lösung ist die Erstellung eines VIEW mit nur den gewünschten Spalten dann SELECT * FROM ThatView .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X