SQL - 使用WHERE子句消除UNION ALL中的重复项

时间:2017-01-14 15:24:31

标签: mysql sql

在toptal.com上,我发现了这个问题,他们提供了以下解决方案:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

有人可以在这里解释X和Y的用法吗?这些变量是?它是否也在MySQL中以这种方式工作?我似乎无法在测试服务器上运行此类查询。

此外,他们提出以下要求:

  

关键是AND a!= X部分。这为您提供了UNION(a.k.a.,UNION DISTINCT)命令的好处,同时避免了大部分性能损失。

但如果这是真的,为什么有人会使用UNION DISTINCT?特别是,为什么不用这种假设更有效的方式来实现呢?

2 个答案:

答案 0 :(得分:1)

x只是“真实”过滤器的伪代码中的占位符。您可能知道字段a是唯一可能在联合的两端都重复的字段,但查询优化器可能不会,因此以这种方式进行联合会更加性能友好。该答案仅适用于某些情况,具体取决于数据的背景。

这不是一个写得很好的问题。

答案 1 :(得分:0)

您可以在WHERE子句中使用OR,如下所示:

tsc