2016-11-28 8 views
0

基本的に、同じテーブルのカラムの値に基づいて異なるWHERE_IN句が必要なので、同じクエリです。SELECTの値に基づいてwhere_in MySQLクエリでIFまたはCASEを使用できますか?

したがって、以下のクエリを見てください。 r.assigned_typeは1または2のいずれかであり、/またはr.assigned_id IN句が必要です。

私はこれを行うことはできますか?

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name` 
FROM `risk_assessments` `r` 
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id` 
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id` 
WHERE `r`.`org_id` = '3' 
AND `r`.`risk_type_id` = '1' 
AND `r`.`assigned` = '1' 
AND `u`.`privilege_level` <= '7' 
AND `r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15') 
OR `r`.`assigned_id` IN('9', '14') 

また、選択サブクエリが必要ですか?

さらに悪いことに、テーブル、DB構造およびコードを再フォーマットする必要がありますか?

私は何をしたいのは、このようなもの(例えば、目的のために短縮クエリ)である:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id` 
FROM `risk_assessments` `r` 
WHERE `r`.`org_id` = '3' 
AND `r`.`assigned` = '1' 
AND `u`.`privilege_level` <= '7' 
CASE WHERE r.assigned_type = 2 
`r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15') 
ELSE 
`r`.`assigned_id` IN('9', '14') 

答えて

4

あなたは同じように、AND/ORいくつかのブラケットで簡単な使用することができますように見えます:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id` 
FROM `risk_assessments` `r` 
WHERE `r`.`org_id` = '3' 
AND `r`.`assigned` = '1' 
AND `u`.`privilege_level` <= '7' 
AND ((`r`.`assigned_type` = 2 
    AND `r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15')) 
    OR `r`.`assigned_id` IN('9', '14')) 
+0

mmm、im '不明な列' r.assigned_type 'in where句' – frobak

+0

私はassigned_typeを選択しているので、その値をクエリに渡していませんか? – frobak

+0

私は私に似ています、 "assigned_type"はテーブルr(risk_assessments)の列ですか?不足しているバックティックでエラーが発生する可能性はありますか?私はaswerでそれらを追加します! – sebkrueger

関連する問題