ignoreOrange
1k
2019-10-07 10:41:15
4
102

간단질문) SQL 조인 1:N이 아닌 1:1로 조건없이 어떻게 해야할까요...


안녕하세요.

제가 SQL 쪽이 약하네요ㅜㅜ


TB1

이름1   번호1

홍길동 1111

김삿갓 1212


TB2

이름2   번호2

김나나 1222

이삿갓 1000


이렇게 테이블이 두개 있다 치면

조건없이 그냥 열로 붙여서 JOIN은 어떻게 하는건지 궁금합니다.


결과값: 

이름1  번호1  이름2   번호2

홍길동 1111   김나나 1222

김삿갓 1212  이삿갓 1000



SELECT A.이름1, A.번호1, B.이름2, B.번호2

FROM TB1 A JOIN TB2 B

ON 1=1


이렇게 그냥 조인해버리면 1:1이 아니라 1:N 으로 되버려서

결과값이 2줄이 아닌 곱절인 4줄로 나옵니다ㅜ


0
0
  • 답변 4

  • kenu
    45k
    2019-10-07 10:47:44

    두 테이블 간의 연결고리가 없어서 안되요.

    아래처럼이라면 가능합니다.

    TB1

    연번1   이름1   번호1

    1   홍길동 1111

    2   김삿갓 1212


    TB2

    연번2 이름2   번호2

    1  김나나 1222

    2  이삿갓 1000

    0
  • 컴포지트
    443
    2019-10-07 10:54:16

    굳이 연결고리 없이 하고 싶다면 ROW_NUMBER() 윈도우 함수로 묶을 수는 있습니다.

    MySQL의 경우 8.x 미만은 윗댓글에 있는 방법 써야 하고, 이상이면 아래 쿼리 식으로 쓸 수 있습니다.

    (왠만한 SQL 언어 지원하지만 OVER 절 뒤에 차이가 있을 수 있습니다. ORACLE의 경우 그냥 ROWNUM만 써도 됩니다.)


    SELECT 이름1, 번호1, 이름2, 번호2
      FROM (SELECT 이름1, 번호1, ROW_NUMBER() OVER () 순번1 FROM TB1) A
     INNER JOIN (SELECT 이름2, 번호2, ROW_NUMBER() OVER () 순번2 FROM TB2) B
             ON A.순번1 = B.순번2


    0
  • n016omega
    398
    2019-10-07 10:56:15

    두 개의 테이블을 왜 그렇게 붙여야 하는지 혹시 이유가 있을까요?

    0
  • ignoreOrange
    1k
    2019-10-07 11:11:42

    아... 감사합니다 연결고리가 있어야하는군요ㅜ  너무단순히 생각했나봅니다.

    n016omega 테스트 데이터 생성하려구요 ㅎㅎ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.