5

我有两个疑问。

当我对它们使用减号运算符时,第一个查询返回 11 行,第二个查询返回 6 行,据我所知,它应该返回 5 行

 SELECT location from uploads where username='Gates'
 MINUS
 SELECT fileshare FROM `whiteboard` where username='Gates' and friend='Curlyclouds'

但我收到以下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以whiteboard在第 2 行的 'minus SELECT fileshare FROM where username='Gates' andfriend='Cur'附近使用正确的语法

希望我的问题很清楚,任何帮助都会对我有所帮助.....谢谢

4

2 回答 2

18

MySQL 不支持EXCEPTMINUS.

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

在此处查看示例和性能比较

于 2012-08-26T08:59:32.657 回答
3

使用“不在”或“不存在”对非常大的数据集执行“减”查询会导致查询时间过长。我想出了一种模仿其他数据库执行的基于集合的操作(合并、排序、删除重复项)的方法。

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

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

于 2015-09-25T20:47:36.843 回答