Na początek przecinek po select *
nie należy.
Po drugie, aliasujesz swoje tabele (table_2 t
i table_1 a
), ale wtedy nie używasz konsekwentnie aliasów, więc możesz mieć problemy w czasie wykonywania. Również z perspektywy konserwacji, myślę, że większość ludzi woli używać aliasów, gdy są zadeklarowane, i nie ma aliasów w inny sposób.
Po trzecie, dokonujesz porównania z kolumnami z tabeli t w zewnętrznym zaznaczeniu ('smith' in (t.column1, t.column2)
), gdy wydaje się to niepotrzebne. Możesz to po prostu zrobić w zewnętrznym zaznaczeniu. Innymi słowy, możesz przenieść nawias terminala przed AND ('smith'
...
Co do tego, czy to działa – nie mam pojęcia, ponieważ nie wiem, co próbujesz osiągnąć.
W połączeniu dałoby to :
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)