2012-06-29 4 views
-1

나는 문이 m.extracard>0으로 사람들에게 결과를 좁힐 어디를 추가 할 위치 :MySQL의 조합과 쿼리 및 다음 쿼리에서

SELECT u.id, u.onoma_u, u.name_u, 
coalesce(u.programa, a.programa) as programa, 
coalesce(u.barcode, a.barcode) as barcode, 
coalesce(u.plan, a.plan) as plan, 
coalesce(u.im_exp, a.im_exp) as im_exp, 
coalesce(u.symb, a.symb) as symb 
FROM (SELECT a1.id, a1.onoma_u, a1.name_u, a1.programa, 
      a1.barcode, a1.plan, a1.im_exp, a1.symb 
     FROM aitisi a1 
     where a1.id between 6017 and 6063 
     UNION 
      SELECT a2.id, m.name, m.surname, NULL, NULL, NULL, NULL, NULL 
      FROM members m 
      JOIN aitisi a2 ON a2.id = m.symbid 
      WHERE m.extracard > 0 
     ) u 
JOIN aitisi a ON a.id = u.id 
where a.id between 6017 and 6063 

을하지만 결과에 나는 사이의 외부에있는 ID를 받고 있어요 범위. WHERE m.extracard > 0을 다른 곳에 두었을 가능성이 있습니까?

+0

아마도 좋을 것 같습니다. 아마도 '(SELECT ...) UNION ALL (SELECT ...)'같은 unioned select를 래핑 해보십시오. BTW,'UNION'은 중복 요소 (== 느린)를 제거하고, 'UNION ALL'은 더 빠르며 중복을 유지합니다. – biziclop

+0

'aitisi.id'는'int'입니까? –

+1

검색어가 이상합니다. 먼저 '아이디'에서 원하는 아이디로 레코드를 선택하고 멤버를 결합한 다음 다시 '아이티'에 가입하고 'NULL'이라는 추가 열을 남기면 다시 한번 '아이디'에 가입하고 누락 된 열을 다시 채 웁니다. . 당신이 당신의 질문에서 당신이 기대하는 것을 설명하는 것이 마음에 드시면, 우리는보다 쉬운 접근법을 내놓을 수있을 것입니다 ... –

답변

0
SELECT u.id, u.onoma_u, u.name_u, 
coalesce(u.programa, a.programa) as programa, 
coalesce(u.barcode, a.barcode) as barcode, 
coalesce(u.plan, a.plan) as plan, 
coalesce(u.im_exp, a.im_exp) as im_exp, 
coalesce(u.symb, a.symb) as symb 
FROM (SELECT a1.id, a1.onoma_u, a1.name_u, a1.programa, 
      a1.barcode, a1.plan, a1.im_exp, a1.symb 
     FROM aitisi a1 
     JOIN mwmbers m ON a1.id = m.symbid 
      WHERE m.extracard > 0 
     where a1.id between 6017 and 6063 
     UNION 
      SELECT a2.id, m.name, m.surname, NULL, NULL, NULL, NULL, NULL 
      FROM members m 
      JOIN aitisi a2 ON a2.id = m.symbid 
      WHERE m.extracard > 0 
     ) u 
JOIN aitisi a ON a.id = u.id 
where a.id between 6017 and 6063