Като начало, запетаята след select *
не принадлежи.
Второ, създавате псевдоним на вашите таблици (table_2 t
и table_1 a
), но тогава не използвате постоянно псевдонимите, така че може да имате проблеми по време на изпълнение. Също така от гледна точка на поддръжката, мисля, че повечето хора предпочитат да използват псевдоними, когато са декларирани, и никакви псевдоними в противен случай.
Трето, правите сравнение с cols от таблицата t във външния избор ('smith' in (t.column1, t.column2)
), когато това изглежда ненужно. Можете просто да го направите във външния избор. С други думи, можете да преместите тази терминална скоба преди AND ('smith'
). ...
Що се отнася до това дали работи - нямам представа, тъй като не знам какво се опитвате да постигнете.
В комбинация това ще ви остави с :
SELECT t.*
FROM TABLE_2 t
WHERE EXISTS (SELECT IF(a.column1 = 'smith', a.column2, a.column1)
FROM TABLE_1 a
WHERE 'smith' IN (a.column1, a.column2)
AND a.status = 1)
AND ( 'smith' IN (t.column1, t.column2)