mysql 쿼리 질문드립니다! 0 4 1,133

by 디디에르 [MySQL] [2021.09.17 10:43:43]


tmp테이블에서 USER_ID가 user0001인 row를 조회하는 쿼리인데

TMP_CD 가 각각 '000002' , '000003'인 row가 존재한다면 '000003'인 row는 제외하고 조회하는 쿼리를 만들어봤는데

좀 난잡한거 같아서 더 깔끔하게 바꿀수있는 쿼리가 있는지 질문드립니다^^

 

SELECT A.* FROM (
SELECT
    USER_ID ,
    TMP_CD 
    (
    SELECT
        COUNT(1)
    FROM
        tmp
    WHERE
        USER_ID = 'user0001'
        AND TMP_CD IN ('000002','000003')
    ) AS cnt
FROM
    tmp
WHERE
    USER_ID = 'user0001'
    )A
WHERE (
        (cnt = 2 AND TMP_CD NOT IN('000003'))
        OR 
        (cnt < 2 AND 1=1)
      );


 

by 마농 [2021.09.17 10:51:03]
SELECT *
  FROM tmp
 WHERE user_id = 'user0001'
   AND tmp_cd IN ('000002', '000003')
 ORDER BY tmp_cd
 LIMIT 1
;

 


by 디디에르 [2021.09.17 11:21:21]

안녕하세요 감사합니다.

row의 건수가 2건이 아니고 여러건인 경우입니다 ㅠㅠ

000002,000003,A00002,B00003


by 마농 [2021.09.17 12:29:36]
WITH tmp AS
(
SELECT 'user0001' user_id, 'A00002' tmp_cd
UNION ALL SELECT 'user0001', 'B00003'
UNION ALL SELECT 'user0001', '000002'
UNION ALL SELECT 'user0001', '000003'
)
SELECT a.*
  FROM tmp a
  LEFT OUTER JOIN tmp b
    ON a.user_id = b.user_id
   AND a.tmp_cd  = '000003'
   AND b.tmp_cd  = '000002'
 WHERE a.user_id = 'user0001'
   AND b.user_id IS NULL
;

 


by 디비디비딥 [2021.09.17 13:19:34]

쿼리작성하는게 재밌어서 매번 눈팅만하면서 혼자 연습해보고 있는데

이렇게 생각할수도 있네요. 많이 배우고 갑니다.

감사합니다

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