我有两个问题。
第一个查询返回11行,第二个查询返回6行,当我对它们使用减号运算符时,它应该返回5行,据我的理解
SELECT location from uploads where username='Gates'
MINUS
SELECT fileshare FROM `whiteboard` where username='Gates' and friend='Curlyclouds'
但我得到以下错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 'minus SELECT fileshare FROM
whiteboard
附近的用户名='盖茨' 和朋友=第2行的'Cur'
希望我的问题很明确,任何帮助对我都有帮助.....谢谢
答案 0 :(得分:16)
MySQL不支持EXCEPT
或MINUS
。
您可以使用NOT EXISTS
,OUTER JOIN ... NULL
或NOT IN
(注意NULL)来进行反半连接。
答案 1 :(得分:3)
使用“not in”或“not exists”对非常大的数据集执行“减号”查询会导致查询时间过长。我想出了一种模仿其他数据库执行的基于集合的操作的方法(合并,排序,删除重复项)。
select column1, count(*), min(setnum)
from
(
select distinct column1, 1 as setnum
from table1
union all
select distinct column1, 2 as setnum
from table2
) as tbl_a
group by column1
having count(*) = 1 and min(setnum) = 1
上述选择在大数据集上产生非常好的性能,而不是使用或不存在。实质上,它正在寻找仅存在于第一组而不存在于第二组中的行。我最近经常使用它,在性能方面取得了很大的成功。