通过上面的答案,我做了这个查询,它有效吗?如果没有,我该如何纠正?
SELECT *,
FROM TABLE_2 t
WHERE EXISTS(SELECT IF(column1 = 'smith', column2, column1)
FROM TABLE_1 a
WHERE 'smith' IN (a.column1, a.column2)
AND a.status = 1
AND ( 'smith' IN (t.column1, t.column2)
)
答案 0 :(得分:1)
首先,select *
之后的逗号不属于。
其次,您对表(table_2 t
和table_1 a
)进行别名,但之后不会始终使用别名,因此在运行时可能会出现问题。另外从维护的角度来看,我认为大多数人更喜欢在声明时使用别名,否则不会使用别名。
第三,在外部选择('smith' in (t.column1, t.column2)
)中对t表进行比较时,这似乎是不必要的。您可以在外部选择中执行此操作。换句话说,您可以将该终端paren移到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)