Untuk memulainya, koma setelah select *
bukan milik.
Kedua, Anda alias tabel Anda (table_2 t
dan table_1 a
), tetapi kemudian Anda tidak menggunakan alias secara konsisten, sehingga Anda mungkin mengalami masalah saat dijalankan. Juga dari perspektif pemeliharaan, saya pikir kebanyakan orang lebih suka menggunakan alias saat dideklarasikan, dan sebaliknya tidak ada alias.
Ketiga, Anda melakukan perbandingan terhadap cols dari tabel t di outer select ('smith' in (t.column1, t.column2)
), ketika itu tampaknya tidak perlu. Anda bisa melakukannya di pilihan luar. Dengan kata lain, Anda dapat memindahkan induk terminal tersebut ke sebelum AND ('smith'
...
Mengenai apakah itu berhasil -- saya tidak tahu, karena saya tidak tahu apa yang ingin Anda capai.
Jika digabungkan, Anda akan mendapatkan :
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)