[SQL] 모호한 열 이름 오류
SQL모호한 열 이름 오류
마이크로 소프트 SQL 서버 2000에서 다음 (전체) SQL 쿼리를 실행할 때 :
SELECT B.ARTIFACTTNS, B.ARTIFACTNAME, B.ARTIFACTTYPE, B.INITIALBYTES, B.TIMESTAMP1, B.FILENAME, B.BACKINGCLASS,
B.CHARENCODING, B.APPNAME, B.COMPONENTTNS, B.COMPONENTNAME, B.SCAMODULENAME, B.SCACOMPONENTNAME
FROM (SELECT DISTINCT A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME
FROM (SELECT DISTINCT ARTIFACTTYPE, ARTIFACTTNS, ARTIFACTNAME
FROM CUSTPROPERTIES WHERE PNAME = 'AcmeSystemName' AND PVALUE = 'MyRuleGroup'
UNION SELECT DISTINCT ARTIFACTTYPE, ARTIFACTTNS, ARTIFACTNAME
FROM CUSTPROPERTIES WHERE PNAME = 'AcmeSystemDisplayName' AND PVALUE = 'MyRuleGroup') A,
(SELECT DISTINCT ARTIFACTTYPE, ARTIFACTTNS, ARTIFACTNAME
FROM CUSTPROPERTIES WHERE PNAME = 'AcmeSystemTargetNameSpace' AND PVALUE = 'http://MyModule') B
WHERE A.ARTIFACTTYPE = B.ARTIFACTTYPE AND A.ARTIFACTTNS = B.ARTIFACTTNS AND A.ARTIFACTNAME = B.ARTIFACTNAME) A, BYTESTORE B
WHERE (A.ARTIFACTTYPE = 'BRG') AND A.ARTIFACTTYPE = B.ARTIFACTTYPE AND A.ARTIFACTTNS = B.ARTIFACTTNS AND A.ARTIFACTNAME = B.ARTIFACTNAME
ORDER BY ARTIFACTTYPE, ARTIFACTTNS, ARTIFACTNAME
나는 다음과 같은 예외가 :
java.sql.SQLException: [Acme][SQLServer JDBC Driver][SQLServer]
Ambiguous column name 'ARTIFACTTYPE'.
어떻게 내가 여기 잘못을하고있는 중이이며 어떻게 해결 할 수 있습니까?
해결법
-
==============================
1.ARTIFACTTYPE 당신이 할 일을 알고 중 하나 A.ARTIFACTTYPE 또는 B.ARTIFACTTYPE 및 서버 요구 사항을 참조 할 수 있기 때문에, 단지 A.ARTIFACTTYPE로 변경하고,이 경우에는 괜찮을 것 같네요.
ARTIFACTTYPE 당신이 할 일을 알고 중 하나 A.ARTIFACTTYPE 또는 B.ARTIFACTTYPE 및 서버 요구 사항을 참조 할 수 있기 때문에, 단지 A.ARTIFACTTYPE로 변경하고,이 경우에는 괜찮을 것 같네요.
명확히하기 위해, 당신은 별명이 열 이름이 모호 언제든지 앞에 지정해야합니다. 이 열이있는 쿼리를 읽기 표,을 제거해 문제에서 이와 같은오고있는 지우 만들면서 항상 별칭 접두사를 사용하는 것이 나쁜 방법이 아닙니다.
당신은 그들이 모두 같은 테이블에서 같은 열을 참조 할 때 당신이 원하는 두 개의 열 중 어떤 구별해야하는 이유 중 하나는 궁금 할 것이다. 그 대답은 자체 테이블 가입하면 A.column 및 B.column의 값은이 열 중 하나의 값이 될 수있다 이러한 외부의 경우 일 수있는 바와 같이 기준 (조인에 따라 상이 할 수 있다는 것이다 없는).
-
==============================
2.그 실행중인 정확한 쿼리의 경우, 나는 그것이 모호한 아무것도 찾을 왜 아무 생각이 없습니다.
그 실행중인 정확한 쿼리의 경우, 나는 그것이 모호한 아무것도 찾을 왜 아무 생각이 없습니다.
나는 내가 생각하는 것은 이에 상응하는 쿼리입니다 써서 문제없이 내 데이터베이스 (오라클)에 달렸다.
편집은 오라클의 새로운 실험의 정확한 출력을 추가. 이 실험에서 실행 쿼리. 다른 변경에 채워진 테이블 이름과 함께 OP에 의해 주어진 정확한 쿼리입니다. 이 쿼리에서 모호한 아무것도 없습니다. 그래서, 그 중 하나가 실행되고 정확한 쿼리가 아니거나 SQL Server는 파서 버그가 있습니다.
SQL> create table props (pname varchar2(100), 2 pvalue varchar2(100), 3 artifacttype number, 4 artifacttns number, 5 artifactname number); Table created. SQL> SELECT 2 DISTINCT A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME 3 FROM 4 (SELECT DISTINCT 5 ARTIFACTTYPE, 6 ARTIFACTTNS, 7 ARTIFACTNAME 8 FROM props 9 WHERE PNAME = 'AcmeSystemName' 10 AND PVALUE = 'MyRuleGroup' 11 UNION 12 SELECT DISTINCT 13 ARTIFACTTYPE, 14 ARTIFACTTNS, 15 ARTIFACTNAME 16 FROM props 17 WHERE PNAME = 'AcmeSystemDisplayName' 18 AND PVALUE = 'MyRuleGroup') A, 19 (SELECT DISTINCT 20 ARTIFACTTYPE, 21 ARTIFACTTNS, 22 ARTIFACTNAME 23 FROM props 24 WHERE PNAME = 'AcmeSystemTargetNameSpace' 25 AND PVALUE = 'http://mymodule') B 26 WHERE A.ARTIFACTTYPE = B.ARTIFACTTYPE 27 AND A.ARTIFACTTNS = B.ARTIFACTTNS 28 AND A.ARTIFACTNAME = B.ARTIFACTNAME 29 / no rows selected
최종 편집
오류를 하는것에 대한 나의 제안은 모든 열 참조를 각 SELECT 절에 테이블에 고유 한 별칭을 부여하고 자격을하는 것입니다. 이 같이 :
SELECT DISTINCT A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME FROM (SELECT DISTINCT P1.ARTIFACTTYPE, P1.ARTIFACTTNS, P1.ARTIFACTNAME FROM {PROPERTIES_TABLE_NAME} P1 WHERE PNAME = 'AcmeSystemName' AND PVALUE = 'MyRuleGroup' UNION SELECT DISTINCT P2.ARTIFACTTYPE, P2.ARTIFACTTNS, P2.ARTIFACTNAME FROM {PROPERTIES_TABLE_NAME} P2 WHERE PNAME = 'AcmeSystemDisplayName' AND PVALUE = 'MyRuleGroup') A, (SELECT DISTINCT P3.ARTIFACTTYPE, P3.ARTIFACTTNS, P3.ARTIFACTNAME FROM {PROPERTIES_TABLE_NAME} P3 WHERE PNAME = 'AcmeSystemTargetNameSpace' AND PVALUE = 'http://mymodule') B WHERE A.ARTIFACTTYPE = B.ARTIFACTTYPE AND A.ARTIFACTTNS = B.ARTIFACTTNS AND A.ARTIFACTNAME = B.ARTIFACTNAME
-
==============================
3.당신은 전체 쿼리를 나열하고 있습니까? 아마 당신은 BY 절 또한 주문이 - 즉 그 문제를 일으킬 수
당신은 전체 쿼리를 나열하고 있습니까? 아마 당신은 BY 절 또한 주문이 - 즉 그 문제를 일으킬 수
나는 게시 된 쿼리에 문제가 없어야한다는 것을에 데이브을 지원하는 것
-
==============================
4.명확하게하기 위해, 모호한 열이 라인 13, 14, 15에게 있습니다.
명확하게하기 위해, 모호한 열이 라인 13, 14, 15에게 있습니다.
-
==============================
5.이처럼 ORDER BY 절에있는 테이블을 지정해야합니다 :
이처럼 ORDER BY 절에있는 테이블을 지정해야합니다 :
ORDER BY A.ARTIFACTTYPE, A.ARTIFACTTNS, A.ARTIFACTNAME
from https://stackoverflow.com/questions/318066/ambiguous-column-name-error by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 별개의 기록을 계산하는 방법 (0) | 2020.07.16 |
---|---|
[SQL] SQL 서버 정규 표현식 (0) | 2020.07.16 |
[SQL] 그것은 tableless이 여러 행으로 선택이 가능합니까? (0) | 2020.07.16 |
[SQL] 정지 MySQL의 재사용 AUTO_INCREMENT ID를 (0) | 2020.07.16 |
[SQL] 데이터베이스 오류 : 행 위치에 없습니다 0 (0) | 2020.07.16 |