sql语句的exist总结
首先借用别人的成果:http://www.cnblogs.com/jerome-rong/archive/2013/03/27/2985505.html
exist 大多数情况下都用于与 in 进行比较,这方面的比较上面的博客讲的很清楚了。
总结就是
SELECT * FROM 数据库1 WHERE EXISTS (SELECT * FROM 数据库2 WHERE 数据库2. 列名 = 数据库1.列名) (sql1)
EXISTS 代替 in 前提是在条件中带上两个库的相等条件
再来看一个sql语句,:
SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE NOT EXISTS (SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件)) (sql2)
sql2 作用是 当 数据1 查询不到 结果时 ,去数据库2 查询结果
这时是把 not exist 内的查询语句 当成 false 和 true 进行判断 。
当 红字的sql语句能查到结果时,sql2 变为
SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE false
即 SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件
当 红字的sql语句能查不到结果时,sql2 变为
SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE true
SELECT * FROM 数据库2