Pour commencer, la virgule après select *
n'appartient pas. Deuxièmement, vous alias vos tables (table_2 t
et table_1 a
), mais vous n'utilisez pas systématiquement les alias, donc vous pouvez avoir des problèmes au moment de l'exécution. Aussi, du point de vue de la maintenance, je pense que la plupart des gens préfèrent utiliser des alias lorsqu'ils sont déclarés, et aucun alias autrement. Troisièmement, vous faites une comparaison avec les colonnes de la table t dans la sélection externe ('smith' in (t.column1, t.column2)
), lorsque cela semble inutile. Vous pouvez simplement le faire dans le select externe. En d'autres termes, vous pouvez déplacer ce parent paren avant le AND ('smith'
...
Quant à savoir si cela fonctionne - je ne sais pas, car je ne sais pas ce que vous essayez d'accomplir.
combiné, qui vous laisse avec:
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)
La réponse ci-dessous fait paraître cette question était un peu trop large, même quand il a été demandé, il est donc logique pour maintenant être mis en attente. – halfer