2013-01-10 17 views
12

có thể trùng lặp:
Select all columns except one in MySQL?Chọn tất cả các lĩnh vực, ngoại trừ duy nhất một lĩnh vực trong mysql

Tôi muốn biết có cách nào để chọn tất cả các lĩnh vực, ngoại trừ một lĩnh vực từ một bảng trong cơ sở dữ liệu của tôi.

Tôi biết tôi có thể mô tả tên trường trong truy vấn chọn.
Ví dụ:

SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename; 

Nhưng câu hỏi của tôi là, liệu có cách nào để làm điều đó một cách đơn giản ... Như thế này

SELECT * FROM tablename EXCEPT(fieldname3); 

Tôi đang sử dụng khuôn khổ MySQL và Zend.

+2

cũng ngu ngốc, có hơn 100 trường hoặc bạn mệt mỏi vì chỉ cần nhập truy vấn. – botenvouwer

+5

@sirwilliam Nếu bạn định tăng số lên 5, bạn sẽ viết + = 5; bởi vì bạn lười biếng để loại bỏ a = a + 1 + 1 + 1 + 1 + 1? Viết mã thường là thời gian về khả năng đọc. Nếu trong truy vấn SQL của bạn, bạn muốn chọn tất cả các cột ngoại trừ một, dạng gần nhất với những gì bạn sẵn sàng thực hiện thực sự sẽ giống như 'SELECT * EXCEPT lame_field FROM ...' –

+1

làm điều này, như SELET *, ~ id ... vv khi có Tạo bảng với CHỌN TỪ thường xuyên nhất, chúng tôi muốn bỏ qua id tự động, – mahen3d

Trả lời

12

bạn có thể làm điều đó một cách dễ dàng như thế

cho phép nói lĩnh vực của bạn là một id = 5

sau đó

select * from your_table where id !=5 

và nếu bạn muốn nói đến các cột

phép nói rằng bạn không muốn chọn column3

sau đó

select column1,column2,column4 from tablename; 

nếu bạn có nhiều cột

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 không có thắc mắc người đang scarpering từ sql, những gì một mess –

6

Có bạn có thể lấy từ 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

Hãy thử điều này -

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

Execute truy vấn này và lấy cụ thể tên trường và đặt từng tên trường vào một ar cá đuối. sau đó kích hoạt mảng bằng ',' bên trong truy vấn chọn.

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

nope, điều này không làm việc, không ít nhất trong MYSQL nó không –

+1

Cách thích hợp cho phương pháp này sẽ là IN MYSQL HIỂN THỊ MÀU SẮC TỪ WHERE Field! = ' ' –

+0

'SHOW FILEDS' &' SHOW COLUMNS' cho tôi kết quả tương tự trên MySQL 5.7.19-0ubuntu0.16.04.1 – RousseauAlexandre