Mặc dù nhiều người nói rằng cách tốt nhất là liệt kê rõ ràng mọi cột bạn muốn trả về, nhưng có những trường hợp bạn có thể muốn tiết kiệm thời gian và bỏ qua một số cột nhất định khỏi kết quả (ví dụ:thử nghiệm). Dưới đây, tôi đã đưa ra hai tùy chọn giải quyết vấn đề này.
1. Tạo một chức năng truy xuất tất cả các tên cột mong muốn:(Tôi đã tạo một lược đồ có tên là các hàm để giữ hàm này)
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns
WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
END
Tạo và thực thi câu lệnh select:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2. HOẶC không cần viết một hàm, bạn có thể:
SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM
information_schema.columns WHERE table_schema = 'test' AND table_name =
'employees' AND column_name NOT IN ('age', 'dateOfHire')),
' from test.eployees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
* Thay thế thử nghiệm bằng tên lược đồ của riêng bạn
** Thay thế nhân viên bằng tên bảng của riêng bạn
*** Thay thế age, dateOfHire bằng các cột bạn muốn bỏ qua (bạn có thể để trống để trả về tất cả các cột hoặc chỉ nhập một tên cột để bỏ qua)
** ** Bạn có thể điều chỉnh độ dài của các varchars trong hàm để đáp ứng nhu cầu của bạn