IntelliJ で SQLを整形する方法が分からなかったので、sublimetext3にSqlBeautifierを入れました。command+k, command+f
*1でSQLを整形してくれます。
SELECT i.item_name, i.cnt AS item_count,i.craeted_at, CONCAT(i.attr_1, ', ', i.attr_2, ', ' , i.attr_3) AS item_attributes, (SELECT p.party_name FROM aaa.PARTIES p WHERE i.user_id = 1) AS party_name FROM (SELECT * FROM user_item WHERE deleted <> 1 ORDER BY item_id ASC) i LEFT JOIN users u ON i.user_id = u.user_id WHERE u.user_id = 123 AND u.deleted <> 1 ORDER BY u.user_id DESC LIMIT 0, 1 ;
整形してみました。
SELECT i.item_name, i.cnt AS item_count, i.craeted_at, CONCAT(i.attr_1, ', ', i.attr_2, ', ' , i.attr_3) AS item_attributes, (SELECT p.party_name FROM aaa.PARTIES p WHERE i.user_id = 1) AS party_name FROM (SELECT * FROM user_item WHERE deleted <> 1 ORDER BY item_id ASC) i LEFT JOIN users u ON i.user_id = u.user_id WHERE u.user_id = 123 AND u.deleted <> 1 ORDER BY u.user_id DESC LIMIT 0, 1 ;
嬉しい
- where句の式が AND(やOR)で縦に並ぶ。
- その際、WHEREの5文字にあわせてインデントされる。
- SQLが多少syntaxエラーでも整形してくれる(例えば、アプリケーションで使用しているSQLテンプレートは、SQLとしては正しいsyntaxになっていない場合もある。)
気になる
- サブクエリのインデントが揃ってない。
- サブクエリがメインクエリみたいに整形してくれない。
- サブクエリの前に空行が入る。
- LIMIT句のオフセットの後に改行が入る。
ちょっと気になる
- ON句がJOIN句と一緒の行になる。
- LIMIT句が ORDER句と一緒の行になる。
その他
- 整形時にコメントを削除する
strip_comments
というオプションが設定にある。
ここまで書いて、最新の MySQL Workbench のSQL整形機能がすこぶる賢いみたいなことをOracleのセミナーで聞いたのを思い出しました。