select 문을 사용하여 하나를 제외한 특정 MySQL 테이블에서 모든 열을 가져 오려고합니다. 이를 수행하는 간단한 방법이 있습니까?
편집 :이 테이블에는 53 개의 열이 있습니다 (NOT MY DESIGN)
답변
실제로 방법이 있습니다.이 작업을 수행하는 데 필요한 권한이 있어야합니다 …
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;
교체 <table>, <database> and <columns_to_omit>
답변
mysql 정의 (수동)에는 그런 것이 없습니다. 그러나 실제로 많은 수의 열이있는 col1
경우 …, col100
다음이 유용 할 수 있습니다.
DROP TABLE IF EXISTS temp_tb;
CREATE TEMPORARY TABLE ENGINE=MEMORY temp_tb SELECT * FROM orig_tb;
ALTER TABLE temp_tb DROP col_x;
SELECT * FROM temp_tb;
답변
이 경우 View가 더 잘 작동합니까?
CREATE VIEW vwTable
as
SELECT
col1
, col2
, col3
, col..
, col53
FROM table
답변
넌 할 수있어:
SELECT column1, column2, column4 FROM table WHERE whatever
column3을 얻지 않고 더 일반적인 해결책을 찾고 있었습니까?
답변
보안 문제 / 민감한 정보와 같은 필드 값을 제외하려는 경우 해당 열을 null로 검색 할 수 있습니다.
예 :
SELECT *, NULL AS salary FROM users
답변
내가 아는 한, 그렇지 않습니다. 당신은 다음과 같은 것을 할 수 있습니다 :
SELECT col1, col2, col3, col4 FROM tbl
원하는 열을 수동으로 선택하십시오. 그러나 많은 열을 원한다면 다음과 같이하십시오.
SELECT * FROM tbl
원하지 않는 것을 무시하십시오.
귀하의 특별한 경우에는 다음과 같이 제안합니다.
SELECT * FROM tbl
몇 개의 열만 원하지 않는 한. 네 개의 열만 원하면 다음을 수행하십시오.
SELECT col3, col6, col45, col 52 FROM tbl
괜찮지 만 50 열을 원한다면 쿼리를 만드는 코드가 너무 읽기 어려워집니다.
답변
@Mahomedalid와 @Junaid의 솔루션을 시도하는 동안 문제가 발견되었습니다. 공유를 생각했습니다. 열 이름에 체크인과 같은 공백이나 하이픈이 있으면 쿼리가 실패합니다. 간단한 해결 방법은 열 이름 주위에 백틱을 사용하는 것입니다. 수정 된 검색어는 다음과 같습니다.
SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(CONCAT("`", COLUMN_NAME, "`")) FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users');
PREPARE stmt1 FROM @SQL;
EXECUTE stmt1;