Сначала позвольте мне сказать, что mjfgates может быть правильным.Оригинальный код psuedo не является «плохим» только потому, что он занимает два шага.Чем сложнее ваш оператор SQL, тем больше шансов, что механизм запросов может не найти оптимальный план.В данном конкретном случае это менее вероятно, потому что есть только одна таблица, на которую мы ссылаемся несколько раз, но в этих ситуациях следует иметь в виду нечто общее.Получение SQL-кода для одного оператора не всегда является достойной целью.
Теперь, чтобы ответить на ваш вопрос:
select colA,colB,colc from table1 t1
where
(
(col1 = $var1 and col2 like '%$var2%') and
EXISTS (select 1 from table1 t2 where t2.col1 = $var1)
)
or
(
(col2 LIKE %$var1%) and
NOT EXISTS (select 1 from table1 t3 where t3.col1 = $var1)
)