-> sql id 박고 where 조건 쿼리 심어서 재사용성 높일 수 있다.
<sql id="aaa">
AND 머시기....
</sql>
<select id=bbb>
SELECT *
FROM A
WHERE 1=1
<include refid="aaa"/>
</select>
-> 인서트문 키가 겹치면 업데이트문으로 전환
<insert id="ccc" parametertype="aaa">
INSERT INTO TABLENAME
( COLUMNNAMES...)
VALUES(VALUES...)
ON DUPLICATE KEY
UPDATE A_COLUMN = A_VALUE
, B_COLUMN=B_VALUE...
@ROWNUM :=@ROWNUM+1
<insert useGeneratedKeys="true" keyProperty="aaa">
<insert>
insert into tablename(
columns
)
select columns
from tablename
where conditions
</insert>
<insert>
<selectKey resultType="java.lang.Integer" keyProperty="seqno" order="BEFORE">
SELECT IFNULL(MAX(AAA), 0)+1 FROM TABLENAME
</selectKey>
INSERT STATEMENT
WITH절은 알고 있는데 WITH RECURSIVE절도 있음. 그냥 UNION ALL 쓸때 R~ 추가해주면 될거 같다...
<insert>
insert into tablename
select ...columns from tablename
order by...
</insert>
근데 order by에 컬럼 순서대로 1 asc 열순서대로 이런거 쌉가능
select insert update delete 중간중간안에 if test 존나 많이 잘주는거 쌉가능
select 구문만 선택에 따라주고 from절은 그대로 쓴다던지 insert도 insert내부를 컬럼별로 혹은 전체를 탄력적으로 대응한다던지 유연한 적용 가능.
ORDER BY안에 케이스문 쌉가능
ORDER BY
CASE WHEN AA = 'A' THEN 1
CASE WHEN AA = 'B' THEN 2
ELSE 3 END ASC
INSERT문에 UNION ALL 중간중간 붙이는 것도 가능함. ㅎㄷㄷ