Để bắt đầu, dấu phẩy sau select *
không thuộc về.
Thứ hai, bạn đặt bí danh cho các bảng của mình (table_2 t
và table_1 a
), nhưng sau đó bạn không sử dụng bí danh một cách nhất quán, vì vậy bạn có thể gặp sự cố trong thời gian chạy. Ngoài ra từ quan điểm bảo trì, tôi nghĩ rằng hầu hết mọi người thích sử dụng bí danh khi được khai báo và không có bí danh nào khác.
Thứ ba, bạn thực hiện so sánh với cols từ bảng t trong vùng chọn bên ngoài ('smith' in (t.column1, t.column2)
), khi điều đó có vẻ không cần thiết. Bạn chỉ có thể làm điều đó trong lựa chọn bên ngoài. Nói cách khác, bạn có thể di chuyển dấu ngoặc đơn đó đến trước AND ('smith'
...
Về việc liệu nó có hoạt động hay không - tôi không biết, vì tôi không biết bạn đang cố gắng hoàn thành điều gì.
Kết hợp lại, điều đó sẽ để lại cho bạn:
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)