SELECT * [열 A 제외]를 사용하여 열을 테이블 A에서 제외하시겠습니까?
우리 모두는 테이블에서 모든 열을 선택하기 위해 사용할 수 있다는 것을 알고 있습니다.
SELECT * FROM tableA
모든 열을 지정하지 않고 테이블에서 열을 제외하는 방법이 있습니까?
SELECT * [except columnA] FROM tableA
내가 아는 유일한 방법은 수동으로 모든 열을 지정하고 원하지 않는 열은 제외하는 것입니다.이 작업은 시간이 많이 걸리기 때문에 시간과 노력을 절약할 수 있는 방법과 테이블에 열이 더 많거나 적을 경우 향후 유지보수를 할 수 있는 방법을 찾고 있습니다.
다음과 같은 방법으로 시도할 수 있습니다.
/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
아니요.
유지관리 조명 모범 사례는 필요한 열만 지정하는 것입니다.
최소 두 가지 이유:
- 이렇게 하면 클라이언트와 데이터베이스 간의 계약이 안정적으로 유지됩니다.매번 동일한 데이터
- 성능, 포괄적인 인덱스
편집(2011년 7월):
개체 탐색기에서 끌어다 놓으면Columns 중 합니다.
열각열이수기않록면으려지를 사용하면 .Script Table AsSSMS에서 테이블 또는 보기를 마우스 오른쪽 버튼으로 클릭하면 다음과 같습니다.

그러면 새 쿼리 편집기 창에서 전체 선택 쿼리를 받은 다음 다음과 같은 원하지 않는 열을 제거합니다.

다 했어요.
SQL(SQL Server)에서 자동화된 방법은 다음과 같습니다.
declare @cols varchar(max), @query varchar(max);
SELECT @cols = STUFF
(
(
SELECT DISTINCT '], [' + name
FROM sys.columns
where object_id = (
select top 1 object_id from sys.objects
where name = 'MyTable'
)
and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
FOR XML PATH('')
), 1, 2, ''
) + ']';
SELECT @query = 'select ' + @cols + ' from MyTable';
EXEC (@query);
BigQuery와 같은 현대적인 SQL 방언은 훌륭한 솔루션을 제안합니다.
SELECT * EXCEPT(ColumnNameX, [ColumnNameY, ...])
FROM TableA
이는 테이블 열 이름 변경으로 인해 항상 업데이트해야 하는 긴 열 목록을 방지하기 위한 매우 강력한 SQL 구문입니다.그리고 현재 SQL Server 구현에서는 이 기능이 누락되어 있어 안타깝습니다.언젠가 마이크로소프트 애저가 데이터 과학자에게 더 친숙해지기를 바랍니다.
데이터 과학자들은 중복 또는 기타 이유로 인해 쿼리를 단축하고 일부 열을 제거할 수 있는 빠른 옵션을 선호합니다.
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
뷰를 한 다음 그냥 "" "" "" "" "" "" "" "" ""를 할 수 .select *보기에는...
예, 가능하지만 권장하지는 않습니다.
CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'
DECLARE @columns varchar(8000)
SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
ORDER BY ORDINAL_POSITION
EXEC ('SELECT ' + @columns + ' FROM contact')
코드 설명:
- 쉼표로 구분된 열 이름 목록을 저장할 변수를 선언합니다.기본값은 NULL입니다.
- 시스템 뷰를 사용하여 테이블의 열 이름을 결정합니다.
- 사용하다
SELECT @variable = @variable + ... FROM열 이름을 연결합니다.의 이유의형.SELECT결과 집합을 반환하지 않습니다.이는 문서화되지 않은 동작일 수 있지만 모든 버전의 SQL Server에서 작동합니다.에 대으로사수있다니습할용안다있니▁as▁use▁could를 사용할 수 있습니다.SET @variable = (SELECT ... FOR XML PATH(''))문자열을 연결합니다. - 을 합니다.
ISNULL첫 번째 열 이름이 아닌 경우에만 쉼표를 추가하는 함수입니다.을 합니다.QUOTENAME열 이름의 공백 및 구두점을 지원하는 함수입니다. - 을 합니다.
WHERE보고 싶지 않은 열을 숨기기 위한 절입니다. - 사용하다
EXEC (@variable)동적 SQL이라고도 하며, 런타임에 열 이름을 확인합니다.컴파일 시 열 이름을 모르기 때문에 필요합니다.
다른 사람들이 말한 것처럼 이 작업을 수행할 방법이 없지만 SQL Server를 사용하는 경우 출력을 쉼표로 구분하여 변경하는 방법을 사용합니다.
select top 1 * from table
출력 창에서 열 목록 전체를 잘라냅니다.그런 다음 모든 열을 입력하지 않고 원하는 열을 선택할 수 있습니다.
기본적으로, 여러분은 여러분이 원하는 것을 할 수 없지만, 여러분은 여러분이 일을 좀 더 쉽게 할 수 있도록 도와주는 적절한 도구를 얻을 수 있습니다.
Red-Gate의 SQL Prompt를 보면 "SELECT * FROM MyTable"을 입력한 다음 "*" 뒤로 커서를 이동하고 <TAB>를 눌러 필드 목록을 확장하고 필요 없는 몇 개의 필드를 제거할 수 있습니다.
완벽한 솔루션은 아니지만 정말 좋은 솔루션입니다! :-) MS SQL Server Management Studio의 IntelliSense가 여전히 이 기능을 제공할 만큼 지능적이지 못하다니 유감입니다......
마르크
DECLARE @SQL VARCHAR(max), @TableName sysname = 'YourTableName'
SELECT @SQL = COALESCE(@SQL + ', ', '') + Name
FROM sys.columns
WHERE OBJECT_ID = OBJECT_ID(@TableName)
AND name NOT IN ('Not This', 'Or that');
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + @TableName
EXEC (@SQL)
업데이트:
또한 이 태스크를 자주 사용하는 경우 이 태스크를 처리하기 위한 저장 프로시저를 생성할 수 있습니다.이 예제에서는 SQL Server 2016+에서 사용할 수 있는 기본 제공 STRING_SPLIT()을 사용했지만, 필요한 경우 SO에서 수동으로 생성하는 방법에 대한 예제가 많이 있습니다.
CREATE PROCEDURE [usp_select_without]
@schema_name sysname = N'dbo',
@table_name sysname,
@list_of_columns_excluded nvarchar(max),
@separator nchar(1) = N','
AS
BEGIN
DECLARE
@SQL nvarchar(max),
@full_table_name nvarchar(max) = CONCAT(@schema_name, N'.', @table_name);
SELECT @SQL = COALESCE(@SQL + ', ', '') + QUOTENAME([Name])
FROM sys.columns sc
LEFT JOIN STRING_SPLIT(@list_of_columns_excluded, @separator) ss ON sc.[name] = ss.[value]
WHERE sc.OBJECT_ID = OBJECT_ID(@full_table_name, N'u')
AND ss.[value] IS NULL;
SELECT @SQL = N'SELECT ' + @SQL + N' FROM ' + @full_table_name;
EXEC(@SQL)
END
그리고 그냥:
EXEC [usp_select_without]
@table_name = N'Test_Table',
@list_of_columns_excluded = N'ID, Date, Name';
예를 들어 암호와 같은 중요한 대/소문자 열을 제외하려는 경우 값을 숨기기 위해 이 작업을 수행합니다.
SELECT * , "" as password FROM tableName;
아니요. 이 작업을 수행할 방법이 없습니다. 당신의 상황에서 가능하다면 사용자 정의 보기를 만들 수 있습니다.
EDIT: DB가 동적 SQL 실행을 지원하는 경우 SP를 작성하고 보고 싶지 않은 열을 전달하여 쿼리를 동적으로 생성하고 결과를 반환할 수 있습니다.적어도 SQL Server에서 이 작업을 수행할 수 있다고 생각합니다.
SQL Server Management Studio를 사용하는 경우 다음을 수행합니다.
- 원하는 테이블 이름을 입력하고 선택합니다.
- +F1를 누릅니다.
- o/p는 표의 열을 표시합니다.
- 원하는 열을 선택
- 선택한 쿼리에 복사하여 붙여넣기
- 쿼리를 실행합니다.
즐거운 시간 되세요.
이 문제를 해결하는 가장 좋은 방법은 보기를 사용하여 필요한 열로 보기를 만들고 데이터를 검색할 수 있습니다.
example
mysql> SELECT * FROM calls;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2016-06-22 | 1 |
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 4 | 2016-06-23 | 2 |
| 5 | 2016-06-23 | 1 |
| 6 | 2016-06-23 | 1 |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
7 rows in set (0.06 sec)
mysql> CREATE VIEW C_VIEW AS
-> SELECT id,date from calls;
Query OK, 0 rows affected (0.20 sec)
mysql> select * from C_VIEW;
+----+------------+
| id | date |
+----+------------+
| 1 | 2016-06-22 |
| 2 | 2016-06-22 |
| 3 | 2016-06-22 |
| 4 | 2016-06-23 |
| 5 | 2016-06-23 |
| 6 | 2016-06-23 |
| 7 | 2016-06-23 |
+----+------------+
7 rows in set (0.00 sec)
요약하자면, 당신은 그것을 할 수 없지만, 나는 위의 모든 의견에 동의하지 않습니다.합법적으로 * 전체 목록(예: 페이징) 중에서 특정 범위를 선택하기 위해 중첩된 쿼리를 생성할 때 내부에서 수행한 경우 외부 선택 문에 각 열을 지정하려는 이유는 무엇입니까?
Management Studio 개체 탐색기를 끌 수 .Columns항목을 쿼리 창에 트리하여 쉼표로 구분된 열의 목록을 가져옵니다.
절차에 대해 설명하는 경우 다음과 같은 방법으로 새 쿼리를 생성하고 즉시 실행할 수 있습니다.
SELECT LISTAGG((column_name), ', ') WITHIN GROUP (ORDER BY column_id)
INTO var_list_of_columns
FROM ALL_TAB_COLUMNS
WHERE table_name = 'PUT_HERE_YOUR_TABLE'
AND column_name NOT IN ('dont_want_this_column','neither_this_one','etc_column');
Postgres sql은 이를 수행하는 방법이 있습니다.
http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html 을 참조하십시오.
정보 스키마 해킹 방법
SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
FROM information_schema.columns As c
WHERE table_name = 'officepark'
AND c.column_name NOT IN('officeparkid', 'contractor')
), ',') || ' FROM officepark As o' As sqlstmt
특정 예제 테이블에 대한 위의 내용 - 다음과 같은 SQL 문을 생성합니다.
O.오피스파크, O.owner, O.square footage를 오피스파크에서 선택합니다.
모든 열을 지정하지 않고 테이블에서 열을 제외하는 방법이 있습니까?
일반적인 방법으로 선언형 SQL을 사용하는 것은 아닙니다.
저는 당신이 제안한 구문이 가치 있고 좋다고 생각합니다.인 ' D 실관데스는키 '튜토리얼 D'와 매우 유사한 구문을 가지고 .ALL BUT다음에는 일련의 속성(속성)이 표시됩니다.
"SQL"은SELECT *이미 많은 비난을 받고 있습니다(@Guffa의 대답은 전형적인 반대입니다). 그래서 저는 그렇게 생각하지 않습니다.SELECT ALL BUT곧 SQL Standard에 포함될 것입니다.
가장 좋은 '워크 어라운드'는 다음을 만드는 것이라고 생각합니다.VIEW만 있으면 그 당 신 이 는 열 가 지 고 만 원 하 때 가 고 ▁with 지 열 만 ▁only ▁the ▁you ▁then ▁desire 그SELECT * FROM ThatView.
이를 지원하는 데이터베이스(SQL Server, MySQL, Oracle, PostgreSQL)를 알지 못합니다.분명히 SQL 표준에 포함되지 않아서 원하는 열만 지정해야 할 것 같습니다.
물론 SQL 문을 동적으로 작성하여 서버가 실행하도록 할 수 있습니다.하지만 이것은 SQL 주입의 가능성을 열어줍니다.
개체 탐색기에서 마우스 오른쪽 버튼으로 표 클릭, 상위 1000개 행 선택
*가 아닌 모든 열이 나열됩니다.그런 다음 원하지 않는 열을 제거합니다.직접 입력하는 것보다 훨씬 빠를 겁니다.
그런 다음 이 작업이 다소 부담스럽다면 Red Gate의 SQL Prompt를 받아 tbl에서 ssf를 입력하고 *로 이동한 후 탭을 다시 클릭합니다.
저는 이것이 조금 오래된 것이라는 것을 알지만, 저는 방금 같은 문제에 부딪혀서 답을 찾고 있었습니다.그리고 나서 저는 선임 개발자에게 아주 간단한 속임수를 보여주었습니다.
관리 스튜디오 조회 편집기를 사용하는 경우, 데이터베이스를 확장한 다음 선택할 테이블을 확장하여 열 폴더를 볼 수 있습니다.
select 문에서 위의 참조된 열 폴더를 강조 표시하고 쿼리 창으로 드래그 앤 드롭하기만 하면 됩니다.테이블의 모든 열을 붙여넣은 다음 열 목록에서 ID 열만 제거합니다.
사실 눈송이가 방금 출시되었습니다. exclude그래서 이제 당신은 그냥:
SELECT * EXCLUDE [columnA,columnB,...] FROM tableA
한 동료가 좋은 대안을 제시했습니다.
- 이전 쿼리에서 테이블(데이터를 생성하거나 가져올 위치)을 선택하여 테이블(완료되면 삭제)로 이동합니다.이렇게 하면 구조가 만들어집니다.
- 새 쿼리 창에 CREATE로 스크립트를 수행합니다.
- 원하지 않는 열을 제거합니다.나머지 열을 하나의 선형으로 만들고 열 목록으로 붙여넣습니다.
- 작성한 테이블을 삭제합니다.
완료...
이것은 우리에게 많은 도움이 되었습니다.
일반적으로 *를 지정하는 대신 원하는 열을 지정하는 것이 좋습니다.따라서 선택한 필드를 반환할 필드를 지정해야 합니다.
내가 이 경우에 자주 사용하는 것:
declare @colnames varchar(max)=''
select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)
SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)
@colnames처럼 .column1,column2,column5
다음과 같이 작업했는데 제대로 작동합니다(버전 5.5.41).
# prepare column list using info from a table of choice
SET @dyn_colums = (SELECT REPLACE(
GROUP_CONCAT(`COLUMN_NAME`), ',column_name_to_remove','')
FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE
`TABLE_SCHEMA`='database_name' AND `TABLE_NAME`='table_name');
# set sql command using prepared columns
SET @sql = CONCAT("SELECT ", @dyn_colums, " FROM table_name");
# prepare and execute
PREPARE statement FROM @sql;
EXECUTE statement;
때때로 같은 프로그램이 다른 데이터베이스 구조를 처리해야 합니다.에서 열 목록을 하여 오류를 피할 수 없었습니다.select진술들.
*옵션 필드를 모두 제공합니다.나는 사용하기 전에 데이터 테이블에 필드가 있는지 확인합니다.가 이이제사이유다니입는하용을 사용하는 입니다.*에select.
제외된 필드를 처리하는 방법은 다음과 같습니다.
Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
If DC.ColumnName.ToLower <> excludefield Then
fieldlist = fieldlist & DC.Columnname & ","
End If
Next
Hive Sql에서 다음 작업을 수행할 수 있습니다.
set hive.support.quoted.identifiers=none;
select
`(unwanted_col1|unwanted_col2|unwanted_col3)?+.+`
from database.table
이것은 당신에게 나머지 콜을 줍니다.
실제 테이블이 아닌 뷰를 사용할 때 BartoszX에서 제안한 답변(저장된 절차)이 제게 맞지 않았습니다.
아이디어와 아래 코드에 대한 크레딧(내 수정 사항 제외)은 BartoszX에 속합니다.
테이블뿐만 아니라 뷰에도 적용하려면 다음 코드를 사용합니다.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[select_without]
@schema_name sysname = N'dbo',
@table_name sysname,
@list_of_columns_excluded nvarchar(max),
@separator nchar(1) = N','
AS
BEGIN
DECLARE
@SQL nvarchar(max),
@full_table_name nvarchar(max) = CONCAT(@schema_name, N'.', @table_name);
SELECT @SQL = COALESCE(@SQL + ', ', '') + QUOTENAME([Name])
FROM sys.columns sc
LEFT JOIN STRING_SPLIT(@list_of_columns_excluded, @separator) ss ON sc.[name] = ss.[value]
WHERE sc.OBJECT_ID = OBJECT_ID(@full_table_name)
AND ss.[value] IS NULL;
SELECT @SQL = N'SELECT ' + @SQL + N' FROM ' + @full_table_name;
EXEC(@SQL)
END
GO
언급URL : https://stackoverflow.com/questions/729197/exclude-a-column-using-select-except-columna-from-tablea
'programing' 카테고리의 다른 글
| 웹 사이트 프로젝트 유형과 함께 C# 6을 사용하는 방법은 무엇입니까? (0) | 2023.04.29 |
|---|---|
| 이클립스에서 내 그라들 종속성 업데이트 (0) | 2023.04.29 |
| Azure 웹 작업 및 배포 슬롯 (0) | 2023.04.29 |
| 기존 Git 저장소를 다른 저장소로 가져오는 방법은 무엇입니까? (0) | 2023.04.29 |
| WPF의 페이지 대 창? (0) | 2023.04.29 |