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

0voto

user678415 Punkte 151

Im Folgenden wird die Liste der in einer Abfrage zu verwendenden Spalten erstellt (die Abfrage wird nicht automatisiert, da dies nicht angegeben wurde):

SELECT 
    GROUP_CONCAT(
        CONCAT('`', `COLUMN_NAME`, '`')
        SEPARATOR ',\n'
    ) AS `cols`
FROM information_schema.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'db'
AND `TABLE_NAME` = 'table_name_here'
AND `COLUMN_NAME` NOT IN ('exclude_col1', 'exclude_col2')

Wird produzieren:

`included_col1`,
`included_col2`,
`included_col3`

Diese können Sie dann zur Verwendung in einer Abfrage kopieren:

SELECT
    `included_col1`,
    `included_col2`,
    `included_col3`
FROM db.table_name_here

0voto

plo Punkte 9

Wäre es nicht einfacher, dies zu tun?

sp_help <table_name>

-Klicken Sie auf die Spalte "Spaltenname" > Kopieren > Einfügen (erzeugt eine vertikale Liste) in ein Fenster "Neue Abfrage" und geben Sie einfach Kommas vor jedem Spaltenwert ein... kommentieren Sie die Spalten aus, die Sie nicht wollen... weit weniger Tipparbeit als jeder hier angebotene Code und trotzdem überschaubar.

0voto

Michael Barash Punkte 59

In SSMS gibt es einen einfacheren Weg mit IntelliSense y Aliasing . Versuchen Sie dies

  1. Klicken Sie mit der rechten Maustaste in den Texteditor und stellen Sie sicher, dass IntelliSense aktiviert ist.
  2. Geben Sie die Abfrage mit einem Alias [SELECT t.* FROM tabellenname t].
  3. Zum Text t.* und löschen Sie die * , und SSMS listet automatisch die Spalten der Datei f Aliasing-Tabelle.

Sie können dann schnell angeben nur die gewünschten Spalten ohne SSMS verwenden zu müssen, um eine Auswahl in ein anderes Skript zu schreiben und dann weitere Kopier-/Einfügevorgänge durchzuführen. Ich verwende dies ständig.

-1voto

Je nach Größe Ihrer Tabelle können Sie sie in Excel exportieren und in eine neue Tabelle transponieren, in der die Spalten der ursprünglichen Tabelle die Zeilen der neuen Tabelle sind. Dann kehren Sie in Ihre SQL-Datenbank zurück, wählen die Zeilen entsprechend der Bedingung aus und fügen sie in eine weitere neue Tabelle ein. Schließlich exportieren Sie diese neue Tabelle nach Excel und führen eine weitere Transponierung durch, um die gewünschte Tabelle zu erhalten, und bringen sie zurück in Ihre SQL-Datenbank.

Ich bin mir nicht sicher, ob die Umwandlung in einer SQL-Datenbank möglich ist, falls ja, wäre es noch einfacher.

Jeff

-1voto

Jagat Punkte 1382

Wenn Sie mysql-workbench verwenden, können Sie mit der rechten Maustaste auf den Tabellenexplorer klicken und auf "Send to SQL editor->Select all statement" klicken.

Er sendet eine Anweisung wie "Select col1, col2,... from tablename".

Entfernen Sie dann diejenigen, die Sie nicht brauchen.

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