2012-08-26 9 views
4

PHP에서 MySQL SELECT JOIN 결과를 평가할 때 테이블 이름을 사용하여 중첩 배열을 만듭니다. 의도 한대로 그러나, 계산 된 열을위한 AS 작업 할 때, 나는 테이블 이름을 설정할 수없는 것 (이 단순화하기 위해, 나는이 예에 가입하지 않고 노력하고 있지만, 문제는 동일) :MySQL에서 테이블 이름 사용하기 "AS"

SELECT `field1`, `field2`, "Test" AS `Table`.`field3` FROM `Test`; 

오류가 발생합니다.

필드 3을 연결할 테이블을 SQL에 어떻게 표시 할 수 있습니까? 출력 컬럼 리터럴 스트링을 선언

답변

9

($pdoStatement->getColumnMeta()의 테이블 이름 "테이블"인 결과)

상기 Table 오프두고 단지 Test를 사용한다. 조인 중 테이블과 연관 될 필요가 없습니다. 조인은 컬럼 별명에 의해서만 액세스 될 것이기 때문입니다. getColumnMeta()과 같은 메타 데이터 함수를 사용할 때 이 테이블과 연결된이 아니기 때문에 테이블 이름은 빈 문자열이됩니다.

SELECT 
    `field1`, 
    `field2`, 
    'Test' AS `field3` 
FROM `Test`; 

참고 : 위의 작은 따옴표를 사용하고 있습니다. MySQL은 일반적으로 문자열에 대해 큰 따옴표를 사용하도록 구성되지만, 작은 따옴표는 RDBMS간에 더 널리 이식 가능합니다.

SELECT 
    field1, 
    field2, 
    field3 
FROM 
    /* subquery wraps all fields to put the literal inside a table */ 
    (SELECT field1, field2, 'Test' AS field3 FROM Test) AS Test 

이제 field3 올 것이다 : 당신이 해야 리터럴 값을 테이블 별명이있는 경우

, 당신은 당신이 사용하고자하는 테이블과 같은 이름을 가진 하위 쿼리에 포장 할 필요가 출력은 Test.field3입니다.

+0

빠른 응답을 보내 주셔서 감사합니다.하지만 내 의도를 오해 한 것 같습니다. 선언 된 열을 AS를 통해 특정 테이블에 연결하고자하므로 나중에 결과 집합을 평가할 때 $ pdoStatement-> getColumnMeta()는 테이블 이름이 비어있는 대신 "Table1"이라고 생각합니다. – preyz

+0

@preyz 당신의 의도를 알았지 만, 리터럴 값이 어떤 테이블과도 연관되어 있지 않기 때문에 그렇게 할 수 없습니다. 위조 된 쿼리에 합류하지 않으면 속일 수 없습니다. 위에 추가 할 것입니다. –

+0

@preyz 위의 해킹 추가 - 이것이 유일한 방법입니다. –

0

SELECT field1, field2, '테스트'AS field3 FR Test; // 간단한 따옴표로 바꾸십시오. '

+0

고마워,하지만 나는 네가 마이클 버코 스키와 같은 가정을했다고 생각해. 그의 대답에 대한 내 의견을 참조하십시오. – preyz

+0

나는 당신이 preyz 내가 질문에 스크립트를 붙여 복사 도움을 드리겠습니다, 그리고 내가 해결, 그것은 간단한 문제 preyz –