Microsoft Access 掲示板

テーブル値を使ってクエリLikeの条件にする事は可能?

3 コメント
views

毎回大変お世話になっています。今回はクエリのLike条件についてです。
テーブルにある摘要欄(文字列フィールド)をLike複数の文字列条件での抽出はクエリに Like "ABC" Or Like "DEF" Or ・・・・としていけばいいのですが、条件部を他のテーブルに設定した値で可能でしょうか?
そうしておけば条件の変更追加も分かり易く簡単に出来ると思いまして。可能なら式はどういう記述になるのでしょうか?

beginner
作成: 2025/10/24 (金) 08:50:35
通報 ...
1
beginner 2025/10/24 (金) 08:57:48 9eaf4@2128d

質問に書き忘れたのですがLikeは部分一致の Like "*ABC*" ・・・です。
宜しくお願いします。

2

テーブルにある摘要欄(文字列フィールド)を
Like複数の文字列条件での抽出はクエリに Like "ABC" Or Like "DEF" Or ・・・・

条件部を他のテーブルに設定した値で可能でしょうか?
そうしておけば条件の変更追加も分かり易く簡単に出来る

 
達成目標に対し、行動目標や手段がそこまで明確なのですから
時間をかけてでも試行錯誤すれば、自ずからご希望の結果が得られたのではないか、と推測します

以下、結果セットが同じになるSQLの記述方法をいくつか載せておきます

 
■DDL

CREATE TABLE t_摘要 (
      x_id AUTOINCREMENT PRIMARY KEY
    , 摘要欄 VARCHAR(100)
);
CREATE TABLE t_条件 (
      y_id AUTOINCREMENT PRIMARY KEY
    , 条件部 VARCHAR(50)
);

 
■データ例

t_摘要

x_id摘要欄
1ABCDEF
2ACE
3DEFFE
4BAACD
5MBABC
6ONJBD
7B_DEF_ABCF
8DEABFC

 
t_条件

y_id条件部
1ABC
2DEF

 
■DML

SELECT * FROM t_摘要 x
WHERE EXISTS 
(
    SELECT 1 FROM t_条件 y
    WHERE x.摘要欄 Like '*' & y.条件部 & '*'
);
SELECT * FROM t_摘要 x
WHERE EXISTS 
(
    SELECT 1 FROM t_条件 y
    WHERE InStr( 1, x.摘要欄, y.条件部, 1 ) > 0
);
SELECT DISTINCT x.*
FROM t_摘要 x
   , t_条件 y
WHERE InStr( 1, x.摘要欄, y.条件部, 1 ) > 0
;
SELECT DISTINCT x.*
FROM t_摘要 x
INNER JOIN t_条件 y
        ON ( x.摘要欄 Like '*' & y.条件部 & '*' )
;

 
■結果

x_id摘要欄
1ABCDEF
3DEFFE
5MBABC
7B_DEF_ABCF
3
beginner 2025/10/27 (月) 08:47:54 9eaf4@2128d

mayuさん ありがとうございます。(返信遅れて失礼しました)
サブクエリを使う手がありましたね。確かにこれは時間かければ辿り付いたかもしれません。
でもInStrは全く思いつきませんでした。またJOIN結合でLikeが使うのは絶対に浮かばないアイデアでしたので、勉強になりました。大変お世話になり、本当にありがとうございました。