テーブルの構造上、よく使うクエリなのでメモ。
データベースは、Access。
xsdファイルでDataSetを作成時、以下のような二つのテーブルのリレーションを行う。
table1
id | name |
---|---|
1 | りんご |
2 | みかん |
3 | バナナ |
table2
code | cost |
---|---|
,1, | 100円 |
,2, | 200円 |
,3, | 300円 |
ここで、table1のidだけがint型。
table1 の id と table2 の code で join する。
table2 の code から ’,’ を取り除いて int型に直して連結すればいい。
しかし、ADO.NET(Access環境だから??)では、REMOVE()関数が使えない。。。(未定義の関数としてエラーが出る。)
そこでMID()関数を使って ‘,’ 以外の数値部分だけを抽出し、それをint型に変換することでjoinすることにした。
作成したSQL文は次の通り。
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id = CINT(MID(table2.code, 2, LEN(table2.code)-2))
逆に table1.id に ‘,’ を付与してstring型に直して連結を試みたが、副問合せを使わないといけなくなり、さらに冗長でややこしくなる。
REMOVE()関数が使えればもっとシンプルにSQLかけるのに。。。