4
다른 SO 사용자의 질문에 대한 답을하려했으나 할 수 없었습니다. JOINS는 여전히 나를 피합니다. 인종 (모든 인종의 목록), 결과 (각 종족에 대한 결과), 드라이버 (드라이버 정보) :MYSQL LEFT JOIN 3 테이블에 NULL 세트가 포함되어 있습니다.
나는 세 개의 테이블이있다. 모든 드라이버가 특정 트랙의 모든 레이스에서 경쟁하지는 않습니다.
레이스 테이블
| race_id | track_id | year | complete |
+-----------+------------+--------+----------+
| 1 | 1 | 2006 | 1 |
| ... | ... | ... | ... |
| 21 | 1 | 2007 | 1 |
| ... | ... | ... | ... |
| 135 | 1 | 2008 | 1 |
| ... | ... | ... | ... |
| 215 | 1 | 2009 | 1 |
| ... | ... | ... | ... |
| 292 | 1 | 2010 | 1 |
| ... | ... | ... |... |
| 351 | 1 | 2011 | 0 |
+-----------+------------+--------+----------+
| race_id | driver_id | finish |
+---------+-----------+--------+
| 135 | 1 | 15 |
| ... | ... | ... |
| 292 | 1 | 6 |
+---------+-----------+--------+
이
| driver_id | name |
+-----------+------------+
| 1 | Joe Driver |
+-----------+------------+
드라이버 테이블 내가 보여주는 결과 집합 원하는
결과 테이블 :| name | race_id | year | finish |
+------------+---------+--------+--------+
| Joe Driver | 21 | 2007 | NULL |
| Joe Driver | 135 | 2008 | 15 |
| Joe Driver | 215 | 2009 | NULL |
| Joe Driver | 292 | 2010 | 6 |
+------------+---------+--------+--------+
을
조 드라이버 만 2,006 후, track_id = 1에서했던 4 개 종족의 2 경주 만 완료 인종을 포함 (1)
이 내 현재 쿼리입니다 :
SELECT driver.driver, race.id, race.year, result.finish
FROM race
LEFT JOIN result ON race.id = result.race_id
LEFT JOIN driver ON result.driver_id = driver.driver_id
WHERE race.track_id = 1
AND race.year > 2006
AND race.complete = 1
AND driver.driver_id = 1
ORDER BY race.id ASC
결과 나는에 조인 간단한 규칙을 내려다 해요 확신
| name | race_id | year | finish |
+------------+---------+--------+--------+
| Joe Driver | 135 | 2008 | 15 |
| Joe Driver | 292 | 2010 | 6 |
+------------+---------+--------+--------+
: 난 단지 운전자가에 있던 종족을 보여줍니다거야?
감사합니다.
Quassnoi : 감사합니다! 그것은 속임수를 정확하게합니다. CROSS JOIN이 열쇠 인 것 같습니다. CROSS JOIN과 LEFT JOIN이 다른 모든 드라이버를 쿼리에서 제외시키는 방법에 대한 지능적인 질문을하고 싶습니다.하지만 할 수는 없습니다. JOINS에 대해 더 자세히 알기위한 최고의 리소스에 대한 제안? – darrenfauth
@darrenfauth : 고급 주제에 대해서는 시동기와 내 사이트 http://explainextended.com에 대한 설명서를 읽으십시오. – Quassnoi
그리고 다른 드라이버를 걸러내는'WHERE' 절에'driver.driver_id = 1'이 있습니다. 조인이 아닙니다. 'driver.driver_id = 1'을 제거하면 모든 드라이버를 볼 수 있습니다. – Quassnoi