[mysql] MySQL에서 하나를 제외한 모든 열을 선택 하시겠습니까?

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;