【问题标题】:Mysql SELECT UNION returning wrong results?Mysql SELECT UNION 返回错误结果?
【发布时间】:2017-08-31 14:42:03
【问题描述】:

我有这个单一的查询。

$sql = "SELECT * FROM `my_table` WHERE type!='' AND (page_option='0' OR page_option='1') ORDER BY type ASC";

返回的列scenario 的前三个结果是a1,d3,e1

现在,当我对其他相同的表执行 UNION ALL 时:

$sql = "SELECT * FROM `my_table` 
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    UNION ALL
                    SELECT * FROM `my_table_2`
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    UNION ALL
                    SELECT * FROM `my_table_3`
                    WHERE type!='' AND (page_option='0' OR page_option='1')
                    ORDER BY type ASC";

我遍历结果,my_table 的前三列是e1,e1,e1

每个表都有一个名为type 的列,用于标识结果来自哪个表。因此,对于联合查询结果,我添加了一个条件以仅显示来自 my_table 的场景

if($type=="my_table") {
  echo $scenario;
}

场景应该与单个查询相同,但它们不是。

我该如何解决?

【问题讨论】:

  • 您能否分享一些示例数据以及预期输出和实际输出?
  • 我做了,单个查询中的前三个结果应该与联合查询中的前三个结果相同,但它们不是。
  • 您可以将每个表的别名设为SELECT t1.* FROM my_table as t1 以使数据相同。
  • 我无法理解您的问题陈述。通过一些示例数据和输出向我们展示这里发生了什么。

标签: mysql


【解决方案1】:

你的假设是错误的。除非您使用ORDER BY,否则无法保证订单

在您的情况下,您只能按type 订购,因此其他字段的顺序可以是随机的

你可以在这里找到一个很好的解释和例子:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/05/20/without-order-by-there-is-no-default-sort-order.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2013-11-07
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多