2009-11-18 7 views
0

에 내가 MySQL 데이터베이스에 몇 가지 작업을하고있는 중이 야에서 열 {0} 완전히알 수없는 조항

1054 - Unknown column 'Puzzles.PuzzleID' in 'on clause' 

테이블과 열 두 이름이 존재하고 올바른지 오류를 받아 난처한 상황에 빠진. 방금 Navicat의 비주얼 디자이너에서 만들었습니다.

SELECT 
`PuzzleCategories`.`PuzzleCategory`, 
`Clients`.`BusinessName`, 
`Puzzles`.`PuzzleNumber` 
FROM 
`Puzzles` 
Inner Join `PuzzleCategories` ON `Puzzles`.`PuzzleCategoryID` = `PuzzleCategories`.`PuzzleCategoryID` , 
`Clients` 
Inner Join `Publications` ON `Clients`.`ClientID` = `Publications`.`ClientID` 
Inner Join `PublicationIssues` ON `PublicationIssues`.`PublicationID` =  `Publications`.`PublicationID` 
Inner Join `PuzzleUsages` ON `PuzzleUsages`.`PuzzleID` = `Puzzles`.`PuzzleID` AND `PuzzleUsages`.`PublicationIssueID` = `PublicationIssues`.`PublicationIssueID` 
+2

조인 된 테이블의 테이블 구조/정의에 대한 세부 정보를 추가 할 수 있습니까? –

+0

'퍼즐'테이블 만 사용하여 쿼리를 작성한 다음 추가 테이블을 차례로 추가하면 어떻게됩니까? 그게 효과가 있니? – lexu

답변

1

열 이름이 맞으면 문제는 조인 순서 일 수 있습니다. 쉼표의 각면이 별도로 만들어지는 것과 같은 소리가 들립니다. (나는이 가능성 또는 수 있는지 확실하지 않습니다하지만 난 당신이주는 정보를 기반으로 한 유일한 추측)로

쿼리가 재구성 될 수있다 : 단지 어쨌든 더 나은 읽는

 

SELECT 
`PuzzleCategories`.`PuzzleCategory`, 
`Clients`.`BusinessName`, 
`Puzzles`.`PuzzleNumber` 
FROM 
`Clients` 
INNER JOIN `Publications` ON `Clients`.`ClientID` = `Publications`.`ClientID` 
INNER JOIN `PublicationIssues` ON `PublicationIssues`.`PublicationID` = `Publications`.`PublicationID` 
INNER JOIN `PuzzleUsages` ON`PuzzleUsages`.`PublicationIssueID` = `PublicationIssues`.`PublicationIssueID` 
INNER JOIN `Puzzles` ON `Puzzles`.`PuzzleID` = `PuzzleUsages`.`PuzzleID` 
INNER JOIN `PuzzleCategories` ON `Puzzles`.`PuzzleCategoryID` = `PuzzleCategories`.`PuzzleCategoryID` 
 

.

+0

Omg Bell, spot on. Navicat의 쿼리 빌더는 ... 일자가 표시됩니다. 잘 했어, 고마워. –

2

나는 Puzzles이 열 PuzzleID이없는 추측에는 요. 해당 테이블에 단순히 ID이라는 컬럼이 있습니까? 또는 Puzzle_ID?

해당 테이블의 현재 정의를 보려면 SHOW CREATE TABLE Puzzles을 실행해야합니다.

가끔 누락 된 따옴표가 범인 일 수 있습니다

... ON `Puzzles.PuzzleID` ... 

위의 문자 그대로라는 칼럼 "Puzzles.PuzzleID,"16 자 중간에 점이있는 열 이름을 찾습니다 것이다.


는 @Bell는 쉼표 스타일을 혼합 조인 및 SQL-92 스타일의 조인 있다는 것을 알아 차리지에 대한 상을받을 자격이. 나는 그것을 알아 차리지 못했다!

조인 작업의 우선 순위가 혼동을 일으킬 수 있으므로 동일한 쿼리에서 두 가지를 모두 사용하면 안됩니다.

JOIN 키워드가 우선 순위가 더 높습니다. 다음과 같이 우리가 테이블 식을 볼 수 있도록 쿼리를 단순화,이 평가 될 것입니다 :

SELECT . . . 
FROM (Puzzles JOIN PuzzleCategories), 
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages) 

문제는이 Puzzles.PuzzleID 열을 비교하는 PuzzleUsages 요구에 조인,하지만 때문에 우선 순위의 문제, 그것은 할 수 없다. 이 열은 마지막 JOIN의 피연산자의 일부가 아닙니다.

오류, (당신은 산술 식에 괄호를 사용하는 것처럼) 테이블 표현을 명시 적으로 재정의 우선 순위 해결하기 위해 괄호를 사용하여

:

SELECT . . . 
FROM Puzzles JOIN (PuzzleCategories, Clients) 
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages 

을 아니면 그냥 SQL-92 JOIN 구문을 지속적으로 사용할 수 있습니다 . 나는 이것이 더 분명하다는 것을 @Bell에 동의한다.

SELECT . . . 
FROM Puzzles JOIN PuzzleCategories JOIN Clients 
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages 
+0

조인을 괄호로 묶는 것은 약간의 성의 검사이며 mysql이 구문 분석이 어디에서 발생했는지 보여주는 더 나은 오류 메시지를 제공하지는 않습니까? – Don

+0

빌 빌 설명 주셔서 감사드립니다. 어제까지 나는 콤마 스타일과 SQL-92 스타일 조인에 대해 들어 본 적이 없었습니다. –