466 Stimmen

Alle Spalten außer einer in MySQL auswählen?

Ich versuche, eine Select-Anweisung zu verwenden, um alle Spalten aus einer bestimmten MySQL-Tabelle außer einer abzurufen. Gibt es eine einfache Möglichkeit, dies zu tun?

EDIT: Es gibt 53 Spalten in dieser Tabelle (NICHT MEIN DESIGN)

255voto

Mahomedalid Punkte 2974

Es gibt tatsächlich eine Möglichkeit, für die Sie natürlich die entsprechenden Berechtigungen haben müssen ...

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');

PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

Ersetzen von <table>, <database> and <columns_to_omit>

72voto

bortunac Punkte 4266

(Versuchen Sie dies nicht auf einem großen Tisch, das Ergebnis könnte... überraschend sein!)

TEMPORÄRE TABELLE

DROP TABLE IF EXISTS temp_tb;
CREATE TEMPORARY TABLE ENGINE=MEMORY temp_tb SELECT * FROM orig_tb;
ALTER TABLE temp_tb DROP col_a, DROP col_f,DROP col_z;    #// MySQL
SELECT * FROM temp_tb;

Die DROP-Syntax kann für Datenbanken unterschiedlich sein @Denis Rozhnev

53voto

Brian Childress Punkte 1090

Würde eine Ansicht in diesem Fall besser funktionieren?

CREATE VIEW vwTable
as  
SELECT  
    col1  
    , col2  
    , col3  
    , col..  
    , col53  
FROM table

34voto

Mike Stone Punkte 43560

Das können Sie tun:

SELECT column1, column2, column4 FROM table WHERE whatever

ohne Spalte3 zu erhalten, obwohl Sie vielleicht nach einer allgemeineren Lösung gesucht haben?

27voto

Thomas Owens Punkte 110966

Soweit ich weiß, gibt es das nicht. Sie können etwas tun wie:

SELECT col1, col2, col3, col4 FROM tbl

und wählen Sie manuell die gewünschten Spalten aus. Wenn Sie jedoch viele Spalten benötigen, können Sie einfach eine:

SELECT * FROM tbl 

und ignorieren Sie einfach, was Sie nicht wollen.

In Ihrem speziellen Fall würde ich vorschlagen:

SELECT * FROM tbl

es sei denn, Sie wollen nur ein paar Spalten. Wenn Sie nur vier Spalten wollen, dann:

SELECT col3, col6, col45, col 52 FROM tbl

wäre in Ordnung, aber wenn Sie 50 Spalten wollen, dann würde jeder Code, der die Abfrage macht, (zu?) schwer zu lesen sein.

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