SQL で特定のカラムを除いて select する方法ってありませんか?

投稿者: Anonymous

よく重複除去するのに

WITH tmp AS (
 SELECT *, 
   ROW_NUMBER() OVER (PARTITION BY uniq_column ORDER BY last_modified desc AS rn
 FROM table
)

SELECT <rn 以外のカラムがずらっと並ぶ> 
FROM tmp
WHERE rn = 1

みたいな書き方するのですが
カラム数が多いと記述が長くなってしまうのと
カラムを追加する時に 最後の SELECT 文と2箇所カラム名を追加しなければいけないのでDRYじゃないです
SELECT * except rn FROM ...
みたいな書き方ってあったりしませんか?

解決

残念ながら存在しません
ガッと列名を全部コピペするのがSQL風ですね
SQLはあまりプログラミング的な言語でないので、どうしてもそういう感じになってしまいます

記述があまりに面倒なようなら、SQL では * で取ってしまって、受け側で捨てるのもありだと思います
ただ、列名は明記したほうが振る舞いが明確化されて、不具合などが減ると思います

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *