応用コードシリーズになります。
今回はSQL構文の「IN句」を便利に使う方法です。
主に復号主キーのテーブルを絞る際に、すべての主キーで絞りこむといった使い方が予想されます。
通常の使用方法.
IN句は1列での比較絞り込みしかできません。
下記の構文はIN句を通常使用したときのコード例になります。
SELECT
ID
,NAME
FROM
EMPLOYEE
WHERE
ID IN (
SELECT
WHERE_FARMER.WHERE_ID
FROM
FARMER
)
やり方.
IN句を普通の使い方をしていては、複数列での比較は不可能です。
そのため、列①と列②の境目に目印となる区切り文字列を挿入し結合させ、IN句内の副問合せ部分も同様の構造にすることで、疑似的に複列での比較を可能としています。
CONVERT(varchar, [カラム名1]) + [区切り文字列] + CONVERT(varchar, [カラム名2])
IN
(
SELECT
CONVERT(varchar, [条件1]) + [区切り文字列] + CONVERT(varchar, [条件2])
FROM
[条件用テーブル]
WHERE
[絞り込み条件]
)
コード例.
コード例では、列「ID」と列「NAME」を区切り文字列「@」を挟み結合させ、
IN句内でも同じ構造とすることで、
列「ID」と列「NAME」が両方一致しないとヒットしないという
IN句でANDを実現する構文となっています。
SELECT
ID
,NAME
FROM
EMPLOYEE
WHERE
CONVERT(varchar, ID) + ‘@’ + CONVERT(varchar, NAME)
IN
(
SELECT
CONVERT(varchar, ID) + ‘@’
+ CONVERT(varchar, NAME)
FROM
FARMER
WHERE
VOLUME > 100
)