2013-01-10 1 views
12

Mögliche doppelte:
Select all columns except one in MySQL?Auswählen aller Felder außer nur ein Feld in mysql

ich wissen will, ist es eine Möglichkeit, alle Felder außer einem Feld aus einer Tabelle in der Datenbank auszuwählen.

Ich weiß, dass ich die Feldnamen in der Select-Abfrage beschreiben kann.
Zum Beispiel:

SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename; 

Aber meine Frage ist, gibt es eine Möglichkeit, auf einfache Art und Weise zu tun ... Gefallen Sie diesen

SELECT * FROM tablename EXCEPT(fieldname3); 

ich MySQL und Zend Framework verwenden.

+2

es ist auch dumm, gibt es mehr als 100 Felder oder sind Sie es leid, nur die Abfrage eingeben. – botenvouwer

+5

@sirwilliam Wenn Sie eine Zahl um 5 erhöhen, schreiben Sie ein + = 5; weil du zu faul bist, a = a + 1 + 1 + 1 + 1 + 1 einzugeben? Beim Schreiben von Code geht es oft um Lesbarkeit. Wenn Sie in Ihrer SQL-Abfrage alle Spalten außer einer auswählen möchten, wäre die nächste Form zu dem, was Sie erreichen möchten, in der Tat so etwas wie 'SELECT * EXCEPT lame_field FROM ...' –

+1

dieses dumm, dass sie nicht einen einfacheren Weg haben wie SELET *, ~ id ... usw., wenn es Create Tabelle mit SELECT FROM gibt, wollen wir die Auto ID am häufigsten weglassen, – mahen3d

Antwort

12

Sie es so, dass lässt leicht tun können

sagen, Ihr Feld

dann

select * from your_table where id !=5 

eine id = 5

ist und wenn Sie Spalten

meinen

können sagen, Sie wollen wählen Sie nicht column3

dann

select column1,column2,column4 from tablename; 

wenn Sie

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

    PREPARE stmt1 FROM @sql; 
    EXECUTE stmt1; 
+13

Wow kein Wunder, die Menschen von SQL sind entkommen versuchen, was für ein Chaos –

6

Ja, Sie holen aus information_schema.columns

SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'dbo' AND table_name = 
'tablename' AND column_name NOT IN ('c1', 'c2')), 
' from dbo.tablename'); 

PREPARE stmt1 FROM @sql; 

EXECUTE stmt1; 
5

Versuchen -

SHOW FIELDS FROM `tablename` WHERE FIELD NOT IN ('f1','f2','f3'); 

diese Abfrage ausführen und die spezifische holen Feldnamen und setzen Sie jeden Feldnamen in ein ar Strahl. dann implode das Array mit ',' innerhalb der Select-Abfrage.

$fields = implode(',',$fields_arr); 
$sql = SELECT $fields FROM `tablename`; 
+0

Nö, das funktioniert nicht, zumindest nicht in MYSQL tat es –

+1

Der richtigen Weg für diesen Ansatz würde SHOW COLUMNS FROM WHERE Feld! IN MYSQL sein =‘ ' –

+0

'SHOW FILEDS' &' SHOW COLUMNS' geben mir das gleiche Ergebnis auf MySQL 5.7.19-0ubuntu0.16.04.1 – RousseauAlexandre