2010-05-11 2 views
0

두 개의 mysql 쿼리를 하나 (하나의 결과 집합을 정렬 등으로 반환)로 실행하는 방법으로 약간 분실했습니다.mysql 복수 및 내부 조인 쿼리 조합

내가 JOINS 복수 할 방법을 이해하지만, 이는 아래의 단지 여러보다 더 결합해야하는 것은 가입 - 그것은 다중를 포함 할 경우 등

1 쿼리

 sql = "SELECT s.id, s.song_name 
      FROM `songs` as s 
      INNER JOIN `artists` as a ON s.artist_id = a.id 
      WHERE ((`a`.id = #{search}))" 

2 쿼리

sql = "SELECT s.id, s.song_name 
     FROM `songs` as s 
     INNER JOIN `similarments` as si ON s.artist_id = si.artist_id 
     WHERE ((`si`.similar_id = #{search}))" 

그런 다음 한 번에 두 가지 쿼리를 실행하여 주문할 수 있습니다. 아니면 하나의 큰 쿼리 (어딘가에 넣을 수도 있음)로 결합 할 수 있습니까?

감사합니다.

+0

SONGs ... –

답변

4

두 개의 쿼리를 실행하고 결과를 결합하는 간단한 방법은 UNION (중복을 제거하지 않으려면 UNION ALL)을 사용하는 것입니다. 귀하의 경우에는 다음과 같이 보입니다.

(
    SELECT s.id, s.song_name 
    FROM `songs` as s 
    INNER JOIN `artists` as a ON s.artist_id = a.id 
    WHERE ((`a`.id = #{search})) 
) 
UNION 
(
    SELECT s.id, s.song_name 
    FROM `songs` as s 
    INNER JOIN `similarments` as si ON s.artist_id = si.artist_id 
    WHERE ((`si`.similar_id = #{search})) 
) 
ORDER BY .... 
+0

의 단일 쿼리에서 두 테이블 모두 LEFT JOIN이 표시됩니다. 고맙습니다! – djburdick