2011-10-16 2 views
1

내가 아래 쿼리가있을 경우 하위 쿼리에서 값을 취득하고 완벽하게 작동에는 문제MYSQL 왼쪽 가입 또는 값이

SELECT description category, 
     details, 
     created_by, 
     CONCAT(name,' ',surname) name, 
     FROM_UNIXTIME(createdon) created_date, 
     FROM_UNIXTIME(updatedon) updated_date, 
     comments_count, 
     entry_id, 
     code car_code 
FROM my_area_details,my_user,my_master_area_categories 
WHERE type=4 
AND code IN (SELECT car_code 
      FROM my_cars 
     WHERE car_company='GM' 
      AND car_model='Chevy') 
AND my_area_details.created_by=my_user.user_id 
AND my_area_details.category=my_master_area_categories.type_id 
ORDER BY category 

위의 쿼리에서 아래의 서브 쿼리는 하나 개의 값 또는 아무것도

을 반환
SELECT car_code 
FROM my_cars 
WHERE car_company='GM' 
AND car_model='Chevy' 

첫 번째 쿼리에서 다른 테이블에 일치하는 레코드가없는 경우 레코드가 0이됩니다.

필자의 요구 사항은 하위 쿼리가 값을 가지며 기본 쿼리가 다른 테이블에없는 레코드로 인해 어떤 레코드도 반환하지 않으면 my_cars에서 car_code 값을 가져와야합니다 (다른 값은 NULL 일 수 있음)).

별칭 테이블을 추가하려고했는데 별칭 테이블 과 조인을 남겼습니다.하지만 다른 조건이 있기 때문에 나는 여전히 자동차 코드를 얻지 못하고 있습니다. 또한 다른 세 테이블에 합류하여 결과를 시도했습니다. my_car 테이블을 사용하여 왼쪽 조인을 수행하십시오. 하지만이 첫 번째 수준의 쿼리에서 자동차 코드를 확인하지 오전이 시간이 걸릴

조인하고 my_cars 테이블에서 car_code를 얻는 방법은 내 다른 테이블에 어떤 것도 일치하지 ...하더라도?

답변

3

나머지 테이블을 다시 결합한 후 car_code으로 car_code를 선행 쿼리로 만들 수 있습니다. 또는 오른쪽에 car_code을 현재 쿼리와 결합합니다. 기본적으로 동일한 효과가 있지만 왼쪽 결합과 오른쪽 결합을 혼합하지 말 것을 권합니다.

문제는 당신은 항상 car_code가 필요합니다. 그렇지 않으면 다른 데이터를 다시 얻지 못하게 될 것입니다. (지금 가지고있는 것과 같은 문제가 있지만 그 반대의 경우), 요구 사항을 읽었을 때 문제 :

테이블간에 더 일관된 필드 이름을 사용하고 INNER 및 LEFT 조인 및 가독성을 위해 테이블 ​​별칭을 사용하는 것이 좋습니다. 귀하의 테이블 사이의 정확한 관계를 모르기 때문에 쿼리가 완전하지는 않지만 쿼리는 이와 같이 보일 수 있습니다.

SELECT description category, 
      details, 
      created_by, 
      CONCAT(name,' ',surname) name, 
      FROM_UNIXTIME(createdon) created_date, 
      FROM_UNIXTIME(updatedon) updated_date, 
      comments_count, 
      entry_id, 
      code car_code 
    FROM car_code cc 
LEFT JOIN my_area_details ad ON ad.code = cc.car_code 
          AND ad.type = 4 
LEFT JOIN my_user u ON u.user_id = ad.created_by 
LEFT JOIN my_master_area_categories mac ON mac.type_id = ad.category 
    WHERE car_code.car_company = 'GM' 
     AND car_code.car_model = 'Chevy'  
ORDER BY category 
+0

이 해결책과 제안에 감사드립니다. 그냥 당신이 준 의견을 제거하려면 쿼리를 수정. 그것은 훌륭한 해결책이었습니다. 다시 한번 감사드립니다. – Bujji