Q&A

  • 조인을 걸어서 이런 결과를 얻고 싶습니다
- DB

aaa테이블

----------

A_IDX     --- 일련번호

A_NAME --- 이름

A_CNT   --- 나이



BBB테이블

------------

A_IDX    ---AAA일련번호

B_IDX   ---BBB일련번호



CCC테이블

-------------

B_IDX  --- BBB일련번호

C_EA  --- 갯수

C_MONEY -- 금액



AAA테이블 --------- BBB테이블 ------------ CCC테이블

                일대다관계                 일대다관게



-  데이타

AAA테이블

-----------

A_IDX                      A_NAME                       A_CNT

==================================================

  1                            QQQ                          12

  2                           WWW                            8

  3                          EEEEEE                       27

  4                         RRRRRR                        19

  5                          TTT                             33



BBB테이블

-----------

A_IDX                    B_IDX

===============================================

   1                        1

   2                        2

   3                        3

   3                        4

   4                        5

   5                        6



CCC테이블

----------

B_IDX        C_EA              C_MONEY

================================================

1                  2                   1000

2                  3                   1000

3                  1                   3000

4                  2                    100

5                  1                    300

6                  2                     500



나올결과

---------

나이별           인원        금액

===================================

0대                 1            3000

10대                2            2300

20대                1            3200

30대                1            1000



위에 나올결과가 정상인데 제가 쿼리를 날려봤더니 아래와 같이 나옵니다 20대의 인원이 잘못나옵니다

  

잘못된결과

---------

나이별           인원        금액

===================================

0대                 1            3000

10대                2            2300

20대                2            3200                --------- 20대의 인원이 1이 나와야 되는데 2가나옵니다

30대                1            1000



BBB테이블에 AAA테이블에 연관된 데이타 갯수에 따라 인원이 늘어나는거 같습니다


올바른값을 얻을려면 어떻게 해야하나요?



- DB

aaa테이블

----------

A_IDX     --- 일련번호

A_NAME --- 이름

A_CNT   --- 나이



BBB테이블

------------

A_IDX    ---AAA일련번호

B_IDX   ---BBB일련번호



CCC테이블

-------------

B_IDX  --- BBB일련번호

C_EA  --- 갯수

C_MONEY -- 금액



AAA테이블 --------- BBB테이블 ------------ CCC테이블

                일대다관계                 일대다관게



-  데이타

AAA테이블

-----------

A_IDX                      A_NAME                       A_CNT

==================================================

  1                            QQQ                          12

  2                           WWW                            8

  3                          EEEEEE                       27

  4                         RRRRRR                        19

  5                          TTT                             33



BBB테이블

-----------

A_IDX                    B_IDX

===============================================

   1                        1

   2                        2

   3                        3

   3                        4

   4                        5

   5                        6



CCC테이블

----------

B_IDX        C_EA              C_MONEY

================================================

1                  2                   1000

2                  3                   1000

3                  1                   3000

4                  2                    100

5                  1                    300

6                  2                     500



나올결과

---------

나이별           인원        금액

===================================

0대                 1            3000

10대                2            2300

20대                1            3200

30대                1            1000



위에 나올결과가 정상인데 제가 쿼리를 날려봤더니 아래와 같이 나옵니다 20대의 인원이 잘못나옵니다

  

잘못된결과

---------

나이별           인원        금액

===================================

0대                 1            3000

10대                2            2300

20대                2            3200                --------- 20대의 인원이 1이 나와야 되는데 2가나옵니다

30대                1            1000



BBB테이블에 AAA테이블에 연관된 데이타 갯수에 따라 인원이 늘어나는거 같습니다


올바른값을 얻을려면 어떻게 해야하나요?



4  COMMENTS
  • Profile
    델사랑 2003.01.31 00:27
  • Profile
    미소나눔 2003.01.30 20:07
    20대가 2번나오는 건 관계가 잘못된걸 조인해서 그래여..

    다대다 관계해소할라고 밑에 처럼 한것 같은데..



    다대다 관계가 아니고 원래가 일대다 관계인것 같은데...

    AAA테이블 --------- (삭제) ------------ CCC테이블
                          일                            다

    [한 사람은 돈을 여러번 낼수 있고 각각의 돈은 한사람한테 받은것이다.]라는
    업무규칙인것 같은데..





  • Profile
    임옥섭 2003.01.30 02:57
    일단 오라클에서 테스트를 했습니다.

    아마.. 다른데서는 좀 바꾸셔야할듯..

    제가 파악하기는 aaa는 사용자, bbb는 사용자별 주문이력, ccc는 주문상세
    라고 보았고..

    SQL> select trunc(aaa.a_cnt, -1) as age, count(distinct aaa.a_idx), count(ccc.c_ex), sum(ccc.c_money)
      2  from aaa, bbb, ccc
      3  where ccc.b_idx = bbb.b_idx AND bbb.a_idx = aaa.a_idx
      4  group by trunc(aaa.a_cnt, -1);

           AGE COUNT(DISTINCTAAA.A_IDX) COUNT(CCC.C_EX) SUM(CCC.C_MONEY)
    ---------- ------------------------ --------------- ----------------
             0                        1               1             1000
            10                        2               2             1300
            20                        1               2             3100
            30                        1               1              500

    입니다.

    즐코하시길.
    담에는 테스트하신.. SQL문을 올려주시면... 더 좋죠.
  • Profile
    열심히 2003.01.30 02:36
    테이블 구조가 잘못 된것 같습니다...

    값이 잘못 나온건 당연나 결과 입니다....레코드가 두개 조인 되니깐

    값이 배로 불어날수 밖에 없죠..테이블 구조를 바꾸 십시오..

    중간에 있는 인덱스 테이블을 없애버리시고 AAA테이블과 CCC테이블을 연결

    하세요..아래의 세개의 테이블을 조인할려면 아래와 같은 답은 만들수 없습니다.

    구체적인 사항을 알려주시면 설계를 하시는데 도움이 될 답을 드릴순 있습니다.

    필요하신 사항은 제 이메일로