Log

いろいろ

2020-12-30ログ:正規表現を思い出す、など

『失敗から学ぶRDBの正しい歩き方』

gihyo.jp

読みきった。

ジェイウォークなテーブルを正規表現で抽出する

『失敗から学ぶRDBの正しい歩き方』の「第17章 複雑なクエリ」で出てきたアンチパターンの例。

id name child_id
1 hoge 1,2,3,4
2 fuga 4,5,6,1
3 foo 7,11,9

一つのカラムにカンマ区切りで複数のデータを格納した、『SQLアンチパターン』で言うところのジェイウォークというアンチパターン

child_id=1のデータを検索するのにも、複数のLIKE演算子をOR接続する必要があり大変だよねというのが本題。

そこから逸れるが、正規表現でどのように抽出するんだっけと思ってクエリを考えた。

SELECT *
FROM table_name 
WHERE child_id ~ '(^|,)1(,|$)'
;

合っている自信がなく、正規表現を少し復習しようと思った。

おまけの配列にキャストするパターン。

SELECT *
FROM table_name
WHERE string_to_array(child_id, ',') @> ARRAY['1'];
;

使う日が来ないといいな。

DISTINCT ON

DISTINCTのON句。初めて知った(標準SQLではない)

www.postgresql.jp

Ping-tでOSS-DBの勉強をする

ping-t.com

残り1割ほどだけど詳しくない分野なので、公式ドキュメントと並行してやりたい。