2013-01-10 10 views
12

Możliwy duplikat:
Select all columns except one in MySQL?Wybór wszystkich pól z wyjątkiem tylko jedno pole w mysql

Chcę wiedzieć, czy istnieje sposób, aby zaznaczyć wszystkie pola oprócz jednego pola z tabeli w mojej bazy danych.

Wiem, że potrafię opisać nazwy pól w zapytaniu wyboru.
Na przykład:

SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename; 

Ale moje pytanie brzmi, czy jest jakiś sposób, aby to zrobić w prosty sposób ... Podoba Ci się to

SELECT * FROM tablename EXCEPT(fieldname3); 

używam MySQL i Zend Framework.

+2

to również głupie, czy jest więcej niż 100 pól lub czy masz dość po prostu wpisywania zapytania. – botenvouwer

+5

@sirwilliam Jeśli zamierzasz zwiększyć liczbę o 5, napisz a = 5; ponieważ jesteś leniwy, aby wypisać a = a + 1 + 1 + 1 + 1 + 1? Pisanie kodu często ma wpływ na czytelność. Jeśli w zapytaniu SQL chcesz wybrać wszystkie kolumny z wyjątkiem jednej, najbliższa forma do tego, co chcesz osiągnąć, to rzeczywiście coś w rodzaju "SELECT * EXCEPT lame_field FROM ..." –

+1

to głupie, że nie mają prostszego sposobu Robiąc to, jak SELET *, ~ id ... itd. kiedy jest tworzymy tabelkę z SELECT FROM najczęściej chcemy pominąć auto id, – mahen3d

Odpowiedz

12

można to zrobić łatwo jak ten

powiedzmy swojej dziedzinie jest id = 5

następnie

select * from your_table where id !=5 

i jeśli masz na myśli kolumny

powiedzmy nie chcesz wybierz column3

następnie

select column1,column2,column4 from tablename; 

jeśli masz wiele kolumn

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 nic dziwnego, ludzie są scarpering z SQL, co za bałagan –

6

Tak można pobrać z 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

Spróbuj tego -

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

Wykonanie tej kwerendy i pobrać konkretny nazwy pól i umieścić każdą nazwę pola w ar promień. następnie implode tablicę z "," wewnątrz kwerendy wyboru.

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

Nie, to nie działa, przynajmniej nie w MySQL nie robi –

+1

właściwy sposób do tego podejścia byłoby w MySQL POKAŻ kolumny z gdy pole! =” ' –

+0

'POKAŻ PLIKI' &' POKAŻ KOLUMNY' daj mi taki sam wynik na MySQL 5.7.19-0ubuntu0.16.04.1 – RousseauAlexandre

Powiązane problemy