문제

두 테이블 내에 값을 추가하는 쿼리를 만들 수 있습니까?

예를 들어, 두 개의 테이블이 있다고 가정 해보십시오

id    value
--    -----
a       1
c       2
d       3
f       4
g       5

그리고

id     value
--     -----
a        1
b        2
c        3
d        4
e        5

그런 다음 두 테이블을 '추가'하면 ID가 일치하는 결과를 얻을 수 있습니다. 따라서 a = 1+1 = 2이며, 그렇지 않은 곳에서는 동일한 결과입니다. 그래서 쿼리가 반환됩니다.

id     value
--     -----
a       2
b       2
c       5
d       7
e       5
f       4
g       5
도움이 되었습니까?

해결책

어쩌면

select coalesce(t1.id, t2.id) as id, (coalesce(t1.value, 0) + coalesce(t2.value, 0)) as value 
from table1 t1 full outer join table2 t2 on t1.id = t2.id

다른 팁

사용:

  SELECT x.id,
         SUM(x.value)
    FROM (SELECT t.id,
                 t.value
            FROM TABLE_1 t
          UNION ALL
          SELECT t2.id,
                 t2.value
            FROM TABLE_2 t2) x
GROUP BY x.id

이렇게 할 수는 있지만 다른 대답은 아마도 더 빠를 것입니다.

SELECT t1.id, t1.value + t2.value AS value
  FROM t1 INNER JOIN t2 ON t1.id = t2.id
UNION
SELECT t1.id, t1.value
  FROM t1
 WHERE t1.id NOT IN (SELECT t2.id FROM t2)
UNION
SELECT t2.id, t2.value
  FROM t2
 WHERE t2.id NOT IN (SELECT t1.id FROM t1)
SELECT
    COALESCE(t1.id, t2.id) AS id,
    COALESCE(t1.value, 0) + COALESCE(t2.value, 0) AS value
FROM
    t1
    FULL OUTER JOIN
    t2 ON t1.id = t2.id

또는

SELECT
    foo.id,
    COALESCE(t1.value, 0) + COALESCE(t2.value, 0) AS value
FROM
    (
    SELECT t1.id FROM t1
    UNION
    SELECT t2.id FROM t2
    ) foo
    LEFT JOIN
    t1 ON foo.id = t1.id
    LEFT JOIN
    t2 ON foo.id = t2.id
SELECT ISNULL(T1.Col1.T2.Col1) as ID, (ISNULL(T1.Col2,0) + ISNULL(T2.Col2,0)) as SumCols
FROM T1 OUTER JOIN T2 ON T1.Col1 = T2.Col2

그룹화 나 아무것도 없습니다. 다음 사례를 처리합니다

ID가 T1이지만 T2에 있지 않으면 T1에서 값을 얻고 그 반대도 마찬가지입니다. 이것은 양방향 포함을 처리합니다.

ID가 둘 다 있으면 합계를 얻게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top