2012-11-27 5 views
1

이 첫 번째 쿼리입니다 :두 개의 쿼리를 병합하는 방법은 무엇입니까?

SELECT 
    SUM(otkupbody_mobile.bruto) AS bruto, 
    SUM(otkupbody_mobile.neto) AS neto, 
    SUM(otkupbody_mobile.muvla) AS muvla, 
    COUNT(*) AS broj_bali 
FROM otkupbody_mobile, 
    otkupheader_mobile 
WHERE 
(
    (otkupheader_mobile.unique_id=otkupbody_mobile.unique_id) 
) 

이 두 번째입니다 :

SELECT 
    SUM(otkupbody.bruto) AS bruto, 
    SUM(otkupbody.neto) AS neto, 
    SUM(otkupbody.muvla) AS muvla, 
    COUNT(*) AS broj_bali 
FROM otkupbody, 
    otkupheader 
WHERE 
(
    (otkupheader.unique_id=otkupbody.unique_id) 
) 

어떻게 나에게 두 쿼리의 결과를 줄 것이다 하나 개의 쿼리를 만들 수 있습니까?

답변

1

당신이 함께 병합하려는 경우 단순히 이것을 사용할 수 있습니다.

Select A.* 
, B.* 
    From (
    SELECT SUM(otkupbody_mobile.bruto) AS bruto, 
     SUM(otkupbody_mobile.neto) AS neto, 
     SUM(otkupbody_mobile.muvla) AS muvla, 
     COUNT(*) AS broj_bali 
     FROM otkupbody_mobile, 
     otkupheader_mobile 
     WHERE otkupheader_mobile.unique_id=otkupbody_mobile.unique_id 
    ) As A 
    , (
    SELECT SUM(otkupbody.bruto) AS bruto, 
     SUM(otkupbody.neto) AS neto, 
     SUM(otkupbody.muvla) AS muvla, 
     COUNT(*) AS broj_bali 
     FROM otkupbody, 
     otkupheader 
     WHERE 
     (
     (otkupheader.unique_id=otkupbody.unique_id) 
     ) 
    ) As B 

을 아니면 행을 병합 할 경우 쿼리 사이에 UNION 절을 사용할 수 있습니다 : 모든 컬럼을 언급과 출력은 행 것이다. union을 사용하려면 두 결과의 열이 동일해야합니다. 출력은 이고 두 번째 행은이고, 열은 이고 처음에는입니다. 이 같은 :

SELECT SUM(otkupbody_mobile.bruto) AS bruto, 
     SUM(otkupbody_mobile.neto) AS neto, 
     SUM(otkupbody_mobile.muvla) AS muvla, 
     COUNT(*) AS broj_bali 
     FROM otkupbody_mobile, 
     otkupheader_mobile 
     WHERE otkupheader_mobile.unique_id=otkupbody_mobile.unique_id 
UNION 
    SELECT SUM(otkupbody.bruto) AS bruto, 
     SUM(otkupbody.neto) AS neto, 
     SUM(otkupbody.muvla) AS muvla, 
     COUNT(*) AS broj_bali 
     FROM otkupbody, 
     otkupheader 
     WHERE 
     (
     (otkupheader.unique_id=otkupbody.unique_id) 
     ) 
+0

미안하지만 navicat에서 작동하지 않습니다. – user1702571

+0

나는 정말 어리석은 질문 일지 모르지만 내가 A와 B를 써야합니까, 아니면 A와 B 대신에 뭔가 다른 것을 써야합니까, 어쩌면 mySQL에서 초보자입니다. – user1702571

+0

@ user1702571 친애하는 친구, 이 질문에 적용된 태그는 MySQL이 아니라 SQL 용입니다. 또한 A와 B에 관해서는 SQL 또는 MySQL에서 "AS"를 넣은 모든 것을 별명 (별명과 같은)이라고합니다. 별칭 선언의 목적은 긴 이름을 사용하지 못하도록하고 개체 참조를 위해 코드를 작성하기 쉽도록하기위한 것입니다. 희망이 도움이됩니다. 나는 그것이 효과가 있든 없든 그것을 마침내 이해할 수 없었다. 답변을 올바르게 표시했지만 작동하지 않는다고하셨습니다. 나는 네 상황을 알지 못했다. – Rikki

2

시도 :

SELECT 
SUM(otkupbody_mobile.bruto) AS bruto, 
SUM(otkupbody_mobile.neto) AS neto, 
SUM(otkupbody_mobile.muvla) AS muvla, 
COUNT(*) AS broj_bali 
FROM otkupbody_mobile, 
otkupheader_mobile 
WHERE 
(
(otkupheader_mobile.unique_id=otkupbody_mobile.unique_id) 
) 
UNION ALL 
SELECT 
SUM(otkupbody.bruto) AS bruto, 
SUM(otkupbody.neto) AS neto, 
SUM(otkupbody.muvla) AS muvla, 
COUNT(*) AS broj_bali 
FROM otkupbody, 
otkupheader 
WHERE 
(
(otkupheader.unique_id=otkupbody.unique_id) 
) 

하는 대신 일반 UNION ALL 사용 UNION

+0

이 또한 괜찮습니다 있지만 결과가 한 행에 요약되는 방식으로 두 테이블에서 열이 동일합니다. 고마워. – user1702571

+0

그런 다음 Mohammad Goudarzi가 제안한 첫 번째 솔루션을 사용해야합니다. – ppeterka

0

사용 UNION ALL의 중복이 필요하지 않은 경우. 요약하면 결과에 SUM을 사용하십시오. 이처럼 :

select sum(bruto), sum(neto), sum(muvla), sum(broj_bali) from (
    SELECT 
    SUM(otkupbody_mobile.bruto) AS bruto, 
    SUM(otkupbody_mobile.neto) AS neto, 
    SUM(otkupbody_mobile.muvla) AS muvla, 
    COUNT(*) AS broj_bali 
    FROM otkupbody_mobile, 
    otkupheader_mobile 
    WHERE 
    (
    (otkupheader_mobile.unique_id=otkupbody_mobile.unique_id) 
) 
    UNION ALL 
    SELECT 
    SUM(otkupbody.bruto) AS bruto, 
    SUM(otkupbody.neto) AS neto, 
    SUM(otkupbody.muvla) AS muvla, 
    COUNT(*) AS broj_bali 
    FROM otkupbody, 
    otkupheader 
    WHERE 
    (
    (otkupheader.unique_id=otkupbody.unique_id) 
) 

SQL Fiddle example

+0

대단한데 괜찮지 만 결과가 한 줄로 요약되기를 바랍니다. 고마워. – user1702571

+0

정확하게 업데이트되도록 쿼리를 업데이트했습니다. SQL Fiddle 예제도 업데이트되었습니다. – unubar

관련 문제