mssql 쿼리문을 mysql 쿼리문으로 변환 0 4 1,340

by tosswin [SQL Query] mssql mysql [2022.05.25 17:18:39]


db를 시작한 지 얼마되지 않은 초짜입니다.

그래서인지 계속 방문해서 질문을 드리게 되네요.

항상 해결해주는 답변을 주셔서 감사합니다.

 

오늘은 mssql 쿼리문으로 mysql(mariaDB) 쿼리문으로 변경하는 데,

도저히 해결이 되지 않는 상황이라 질문을 드리게 되었습니다.

 

테이블 1 - testtb_ph

p_flag l_num p_code flag
O 12345601 P-3 Y
O 12345602 P-3 Y
O 12345603 P-3 Y
O 12345603 P-3 Y
O 12345604 P-3 Y
O 12345605 P-3 Y
O 12345606 P-3 Y
O 12345606 P-3 Y
O 12345607 P-2 Y

 

테이블 2 - testtb_pl

flag l_num o_code
O 12345601 P0000001
O 12345602 P0000002
O 12345603 P0000003
O 12345604 P0000004
O 12345605 P0000005
O 12345606 P0000006
O 12345607 P0000007

 

테이블 3 - testtb_oe

o_code i_code
P0000006 I0000001
P0000001 I0000001
P0000002 I0000001
P0000003 I0000001
P0000004 I0000001
P0000005 I0000001
P0000007 J0000002
아래 쿼리문은 mssql 입니다.

SELECT
	ROW_NUMBER() OVER(ORDER BY B.o_code DESC) AS ROWNUM,
	flag,
	l_num,
	ISNULL((
		SELECT
			COUNT(*)
		FROM (
			SELECT
				MAX(FLAG) AS FLAG
			FROM testtb_ph
			WHERE l_num = A.l_num 
			AND FLAG = 'Y'
			GROUP BY p_code) T) , 0) AS pf
FROM testtb_pl A
LEFT JOIN testtb_oe B
ON A.o_code = B.o_code

이에 대한 결과는 아래와 같습니다.

ROWNUM flag l_num pf
1 O 12345607 1
2 O 12345606 1
3 O 12345605 1
4 O 12345604 1
5 O 12345603 1
6 O 12345602 1
7 O 12345601 1

 

그런데, mysql(mariaDB) 쿼리문으로 바꿔서 같은 결과를 내고 싶은데,

해결이 되지 않습니다.

어떻게 수정하면 같은 결과를 얻을 수 있을 지 문의드립니다.

 

항상 해결할 수 있는 답변을 주셔서 감사합니다.

by 마농 [2022.05.25 17:53:56]

버전은요?


by tosswin [2022.05.25 18:06:59]

mariaDB 10.3.3.4 입니다.


by 마농 [2022.05.25 18:29:05]
WITH testtb_ph AS
(
SELECT 'O' p_flag, '12345601' l_num, 'P-3' p_code, 'Y' flag
UNION ALL SELECT 'O', '12345602', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345603', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345603', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345604', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345605', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345606', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345606', 'P-3', 'Y'
UNION ALL SELECT 'O', '12345607', 'P-2', 'Y'
)
, testtb_pl AS
(
SELECT 'O' flag, '12345601' l_num, 'P0000001' o_code
UNION ALL SELECT 'O', '12345602', 'P0000002'
UNION ALL SELECT 'O', '12345603', 'P0000003'
UNION ALL SELECT 'O', '12345604', 'P0000004'
UNION ALL SELECT 'O', '12345605', 'P0000005'
UNION ALL SELECT 'O', '12345606', 'P0000006'
UNION ALL SELECT 'O', '12345607', 'P0000007'
)
, testtb_oe AS
(
SELECT 'P0000006' o_code, 'I0000001' i_code
UNION ALL SELECT 'P0000001', 'I0000001'
UNION ALL SELECT 'P0000002', 'I0000001'
UNION ALL SELECT 'P0000003', 'I0000001'
UNION ALL SELECT 'P0000004', 'I0000001'
UNION ALL SELECT 'P0000005', 'I0000001'
UNION ALL SELECT 'P0000007', 'J0000002'
)
SELECT ROW_NUMBER() OVER(ORDER BY a.o_code DESC) rn
     , a.flag
     , a.l_num
     , SIGN(COUNT(c.l_num)) pf
  FROM testtb_pl a
--  LEFT JOIN testtb_oe b
--    ON a.o_code = b.o_code
  LEFT JOIN testtb_ph c
    ON c.l_num = a.l_num
   AND c.flag  = 'Y'
 GROUP BY a.flag, a.l_num, a.o_code
;

 


by tosswin [2022.05.26 22:31:25]

마농님, 감사합니다.

제가 부족하여 아직 제대로 적용시키진 못했지만,

이해하고 아는 데 큰 도움이 되었습니다.

편안한 밤 되세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입