2011-01-31 4 views
0

나는이 쿼리를 가지고3 테이블은 한 테이블의 한 필드와 다른 테이블의 한 필드를 조인합니다.

SELECT cities.city, city_time.time_slot 
FROM cities, city_date, city_time 
WHERE city_time.city_date_id = city_date.city_id = city_date.city_id = cities.id 
AND city_time.city_date_id = '1' 
SELECT cities.city, city_time.time_slot 
FROM cities, city_date, city_time 
WHERE city_time.city_date_id = city_date.city_id = city_date.city_id = cities.id 
AND city_time.city_date_id = '1' 
city.city와 city_time.time_slot을 동일한 행에 넣으려고하는데 city_date,

를 통해 연결된다.
cities has- 
=========== 
id 
city, 

city_date has 
=========== 
id 
city_id (fk for city_table) 

city_time has 
============== 
city_date_id (FK for city_date table) 
time_slot 

몇 가지 방법을 시도해왔다 .-

SELECT cities.city, city_time.time_slot 
FROM (city_date LEFT JOIN cities ON city_time.city_date_id = city_date.city_id) 
LEFT JOIN city_date ON city_time.city_date_id = city_date.city_id 
WHERE city_time.city_date_id = '1' 

city 테이블의 city 필드를 city_time 테이블의 time_slot 필드에 연결하기 만하면됩니다. 왼쪽 조인은 필요하지 않지만 내 생각을 이해하는 데 도움이 될 것이라고 생각했습니다.

+0

'code' 블록에서 SQL 코드를 포맷 할 수 있습니까? 그렇게하면 더 쉽게 읽을 수 있습니다. –

답변

0

다른 질문 사항은 귀하의 의견입니다.
가명 (별칭)에 더 짧은 이름을 사용하십시오.

SELECT c.city, t.time_slot 
FROM cities c 
LEFT JOIN city_date d on d.city_id = c.id 
LEFT JOIN city_time t on t.city_date_id = d.city_id AND t.city_date_id = '1' 
1
select c.city, ct.time_slot 
    from cities c 
     inner join city_date cd 
      on c.id = cd.city_id 
     inner join city_time ct 
      on cd.id = ct.city_date_id 
    where ct.city_date_id = 1 
+0

플러스 1 끔찍한 암시 적 조인 구문을 없애기 위해! – HLGEM

0

당신은 두 테이블의 공통의 무언가가 비교 및 ​​인쇄 원하는 것을 할 수 있어야 있도록 .. 같은 같은 기록을 가지고 도시 ID와 도시의 시간 ID 같은 것을 추가 할 수 있습니다.

관련 문제