0

質問があります

select X from survey
where survey_date > date_add(curdate(), interval -90 day)

これは、現在のXを示しています。しかし、残念ながら、私の制御できない状況では、戻り値は値のリストではなく、コンマで区切られた値のリストのリストです。だからそれは戻ります

| X                  |
+--------------------+
|thing1              |
|thing2,thing3,thing4|
|thing5              |
|thing6,thing7       |

などなど。

これをサブクエリとして使用したいと思いました。データが1行である場合、私は

select Y from othertable
where irrelevant_conditions && Y not in (
    select X from survey
    where survey_date > date_add(curdate(), interval -90 day)
);

しかし、私が持っているかもしれないので、これは機能しませんthing3

代わりに私はする必要がありますRLIKE。(データはその形式で衝突できないため、ここでコンマをチェックするために追加の正規表現の魔法は必要ありません。)MySQLでそれは可能ですか?

4

2 に答える 2

2

カンマ区切りの文字列を検索するには、find_in_setを使用できます。Yが文字列でない場合、暗黙のキャスト操作が行われます。

select Y from othertable 
where irrelevant_conditions && not exists (
    select  1
    from survey
    where 
     survey_date > date_add(curdate(), interval -90 day) and
     find_in_set(othertable.Y, X) > 0 
);
于 2012-05-03T19:04:13.593 に答える
0

danhipの複雑なクエリは、次のように簡略化できます。

select Y from othertable 
join survey on survey_date > date_add(curdate(), interval -90 day)
    and find_in_set(othertable.Y, X) = 0 
where irrelevant_conditions
于 2012-05-03T19:47:42.140 に答える