单个查询比同一个查询UNION提供更多的结果吗?

时间:2018-03-08 13:14:45

标签: sql union universe

我不确定我是否误解了一个基本的东西,或者我的数据库如何解释查询有问题...运行宇宙

当我跑步时

SELECT POIDSBRUT, PRIXBRUTU, FAMILLENU, TPSMOU, TPSMOUPLANIF, QTE1PLANIFMOU, OF5
FROM GPSOF
WHERE DFINPLANIFMOU >= '%1' AND DFINPLANIFMOU <= '%2' AND EQPLANIFMOU <> 'A placer' AND EQPLANIFMOU LIKE 'A%'

它给了我5个结果(这里一切正常)。

但是当我跑步时

SELECT POIDSBRUT, PRIXBRUTU, FAMILLENU, TPSMOU, TPSMOUPLANIF, QTE1PLANIFMOU, OF5
FROM GPSOF
WHERE DFINPLANIFMOU >= '%1' AND DFINPLANIFMOU <= '%2' AND EQPLANIFMOU <> 'A placer' AND EQPLANIFMOU LIKE 'A%'
UNION 
SELECT POIDSBRUT, PRIXBRUTU, FAMILLENU, TPSMOU, TPSMOU2PLANIF, QTE2PLANIFMOU, OF5
FROM GPSOF
WHERE DFIN2PLANIFMOU >= '%1' AND DFIN2PLANIFMOU <= '%2' AND EQ2PLANIFMOU <> 'A placer' AND EQ2PLANIFMOU LIKE 'A%'
UNION 
SELECT POIDSBRUT, PRIXBRUTU, FAMILLENU, TPSMOU, TPSMOU3PLANIF, QTE3PLANIFMOU, OF5
FROM GPSOF 
WHERE DFIN3PLANIFMOU >= '%1' AND DFIN3PLANIFMOU <= '%2' AND EQ3PLANIFMOU <> 'A placer' AND EQ3PLANIFMOU LIKE 'A%'

我只得到2个结果。要么我不明白UNION是如何工作的,要么我的数据库有另一个问题...... 感谢

3 个答案:

答案 0 :(得分:2)

  

UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道返回的所有记录都是您的联合中唯一的,请改用UNION ALL,它会提供更快的结果。

Source (nice blog post on UNION performance)

答案 1 :(得分:1)

UNION删除重复项 - 我猜你的第一个结果集中的4条记录是相同的吗?

答案 2 :(得分:-1)

为什么使用union进行此查询?为什么不选择你想要的行?

SELECT POIDSBRUT, PRIXBRUTU, FAMILLENU, TPSMOU, TPSMOUPLANIF, 
       (CASE WHEN EQPLANIFMOU LIKE 'A%' THEN QTE1PLANIFMOU
             WHEN EQPLAN2IFMOU LIKE 'A%' THEN QTE2PLANIFMOU
             WHEN EQPLAN3IFMOU LIKE 'A%' THEN QTE3PLANIFMOU
        END) as QTE1PLANIFMOU,
       OF5
FROM GPSOF
WHERE DFINPLANIFMOU >= '%1' AND DFINPLANIFMOU <= '%2' AND EQPLANIFMOU <> 'A placer' AND
      (EQPLANIFMOU LIKE 'A%' OR
       EQPLAN2IFMOU LIKE 'A%' OR
       EQPLAN3IFMOU LIKE 'A%' 
      )