2012-07-12 3 views
1

결과 :내가 왜 제대로 작동하지 못할

SELECT `Title`.`Title`, `FirstName`, `LastName`, `Address1`, `Address2`, `Town`.`Town`, `County`.`County`, `PostalCode`, `Phone1`, `Solo` 
FROM `Person` 
JOIN `Title` ON `Person`.`Title` = `Title`.`id` 
JOIN `Town` ON `Person`.`Town` = `Town`.`id` 
JOIN `County` ON `Person`.`County` = `County`.`id` 
WHERE `Person`.`Solo`='1' 
ORDER BY `LastName` ASC; 

0을 반환 결과, (이, 적어도 5 개 결과가 안 어디에 Solo = '1')

그리고 그것을 수정하면 조인 모두 밖으로 데리고 :

SELECT `Title`, `FirstName`, `LastName`, `Address1`, `Address2`, `Town`, `County`, `PostalCode`, `Phone1`, `Solo` 
FROM `Person` 
WHERE `Person`.`Solo`='1' 
ORDER BY `LastName` ASC; 

나는 결과를 얻을? 내가 그것을 꺼내기 위해 수정하면 WHERE Person.Solo='1' 그것은 나에게도 결과를 준다. 어디 서리 모든 행을 반환해야합니까? 누군가 설명 할 수 있습니까?

:

참고 : 솔로는 TINYINT, 그것은 모든 레코드에 0 또는 1 중 하나를 equels입니다! 귀하의 조인

답변

6

그것은 Person 경우 Title또는Town또는Country 다음은 반환되지 것없는 것을 의미 엄격합니다. 전체 WHERE 절을 제거하더라도 결과가 없습니다.

대신 LEFT JOIN을 시도하십시오. 다른 사람에게 당신의 코드를 더 쉽게 읽을 A Visual Explanation of SQL Joins

+0

아였습니다! 도와 주셔서 감사합니다, 나는 왼쪽 오른쪽과 JOIN에서 다시 읽을 것입니다! :) – Chud37

+0

@ Chud37, 당신은 환영합니다.) 조인 유형에 대한 기사 링크를 추가했습니다. –

1

몇 가지 일반적인 규칙이있다 :

이의 일 조인 방법 다른 유형의 좋은 설명입니다. 먼저, (autoincrement) -primary-key에 항상 id을 사용하십시오. 그런 다음 관련 표에서 xxxxx_id를 사용하십시오. 두 번째로 LEFT JOIN 또는 INNER JOIN이라는보다 정확한 JOIN 선언을 사용해야합니다. 그게 더 읽기 쉽습니다. 셋째 : 일반적으로``를 사용할 필요가 없습니다. 이 외에도 테이블 별칭을 사용하여 SQL 코드의 양을 줄일 수 있습니다.

SELECT ti.title, firstname, lastname, address1, address2, to.town, county.county, postalcode, phone1, solo 
FROM person AS p 
LEFT JOIN title AS ti ON p.title = ti.id 
LEFT JOIN town AS to ON p.town_id = to.id 
LEFT JOIN county AS c ON p.county = c.id 
WHERE p.solo=1 
ORDER BY lastname ASC; 

그냥 추천 ... 그것을

관련 문제