减号运算符给我mysql中的错误

时间:2012-08-26 08:57:21

标签: mysql

我有两个问题。

第一个查询返回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'

希望我的问题很明确,任何帮助对我都有帮助.....谢谢

2 个答案:

答案 0 :(得分:16)

MySQL不支持EXCEPTMINUS

您可以使用NOT EXISTSOUTER JOIN ... NULLNOT IN(注意NULL)来进行反半连接。

See examples and performance comparisons here

答案 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

上述选择在大数据集上产生非常好的性能,而不是使用或不存在。实质上,它正在寻找仅存在于第一组而不存在于第二组中的行。我最近经常使用它,在性能方面取得了很大的成功。