2010-07-02 4 views
21

필드 이름이 'product'인 MySQL 테이블에 테이블이 있는데 이름을 'ds-product'로 바꾸고 싶습니다.테이블 필드에 하이픈을 사용할 수 있습니까?

내가 사용하는 CMS 유형 시스템은 formfields의 ID를 삽입 할 테이블 필드의 이름으로 사용합니다.

대부분의 경우 잘 작동하지만 특정 필드의 경우 ID가 부여 된 ID 앞에 'ds-'가 추가되므로 테이블 필드 이름을 일치시켜야합니다. 쿼리를 수행 할 때

는 그러나, 나는 '필드 목록'에서

알 수없는 열 'sales.ds은'

내가 전화 DS-제품 필드를 가질 수있는 방법이 있나요하는 오류 ?

+9

가능합니다. 그러나 매번 데이터베이스 *의 적절한 인용 문자로 해당 테이블 이름을 묶어야하므로이 작업을 수행하지 않으려 고합니다. 대신 밑줄을 사용하는 것을 고려 했습니까? – Charles

+0

@Charles : 귀하의 의견은 대답이어야합니다 –

+0

@Charles : +1, 비표준 열 이름은 방금 언급 한 이유 때문에 최후의 수단이되어야합니다. –

답변

30

당신이 구분 식별자 사용하는 경우 예, 구두점, 공백, 국제 문자 및 SQL 예약어를 사용할 수 백 진드기를 사용하여 MySQL의에서

SELECT * FROM `my-table`; 

합니다. 표준 SQL에서는 큰 따옴표를 사용하십시오.

아니면 MySQL을 사용하는 경우 사용자가 설정할 수 ANSI_QUOTES SQL mode :

SET SQL_MODE = ANSI_QUOTES; 
SELECT * FROM "my-table"; 
+0

실제로 사용되는 쿼리에 액세스 할 수 없습니다. ds-product라는 필드를 가지고 표준 쿼리에서 사용하는 방법이 있습니까? – Jacob

+4

아니요, 하이픈은 연산자이며 식별자 중간에서 하이픈을 사용할 수 없습니다. 'ds'와'product' 열이 있다면? 그러면'ds-product'는 하나의 열에서 다른 열을 뺀 연산식이 될 것입니다. SQL은 구분 된 식별자를 지원하므로이 모호성을 해결할 수 있습니다. FWIW, 나는 이것을 전혀 허용 할 수있는 다른 프로그래밍 언어를 모른다! –

+0

예, 감사합니다. – Jacob

4

테이블에 통화의 마지막 부분에 괄호를 넣어보십시오. 귀하의 경우 :

SELECT * FROM [TABLE-NAME]; 

단지 테이블 이름에만 대괄호를 사용하십시오. 위치하는 전체 데이터베이스가 아님

SELECT * FROM some_database.anotherdatabase.[your-table]; 

P.S. 열에서도 작동합니다.

Microsoft SQL Server Management를 사용하고 있습니다.

+2

Alas, MS SQL 및 MySQL은 서로 다르며 종종 다른 답변이 필요합니다. 그것들을 혼합 할 수는 없습니다. 내가 downvotes의 무리를 얻을 전에이 답변을 삭제하는 것이 좋습니다거야. –

관련 문제