안녕하세요.
SELECT 후에 UPDATE가 되는 쿼리를 만들고 있습니다.
UPDATE winegraph.board_faq bf LEFT JOIN ( SELECT bfOrder, bfSeq FROM winegraph.board_faq bf2 WHERE bf2.bfOrder > bfOrder AND bf2.bfSeq != bfSeq ) b ON bf.bfSeq = b.bfSeq SET bf.bfOrder = bfOrder + 1 WHERE bf.bfSeq != bfSeq
이렇게 만들었는데
결과값이 2개가 나오는데 하나만 UPDATE처리를 해주고 있네요
어떻게 해야할지 모르겠습니다.ㅠㅠ
UPDATE winegraph.board_faq AS t JOIN ( SELECT @rownum:=@rownum+1 rownum, bfseq, bfOrder FROM winegraph.board_faq CROSS JOIN (select @rownum := 0) rn WHERE bfSeq != 8 AND bfOrder >= 7 ) AS r ON t.bfSeq = r.bfSeq SET t.bfOrder = r.rownum
일단 이런식으로 하고있었습니다.
update는 되는데
현재 bfSeq가 8이 아닌것들은 저장되어있는 bfOrder에 +1을 해줘야 하는데 rownum이 저장되는것 같더라구요
원본쿼리는 조회대상에 대해 1번부터 차례대로 갱신하는 거구요.
원본쿼리와는 전혀 다른 개념의 업데이트가 필요한 거네요.
전혀 다르게 접근하셔야죠.
그리고 사실 원본 쿼리 또한 셀프 조인이 필요 없을 듯하네요.
UPDATE winegraph.board_faq SET bfOrder = bfOrder + 1 WHERE bfSeq != 8 ; -- 원본 쿼리 셀프 조인 제거 -- UPDATE winegraph.board_faq t CROSS JOIN (SELECT @rownum := 0) r SET t.bfOrder = (@rownum := @rownum + 1) WHERE t.bfSeq != 8 AND t.bfOrder >= 7 ;