带有union的SQL select语句列顺序

时间:2015-08-21 13:55:56

标签: php sql

联合表中是否有一种方法可以忽略第一个选择列顺序并按列名匹配记录?

以此为例:

// TEST1 table:
|  a  |  b  |
-------------
|  3  |  5  |

// TEST2 table:
|  b  |  a  |
-------------
|  4  |  9  |

select a, b from TEST1 union ( select b, a from TEST2)

// The result must be a table like the on below:
|  a  |  b  |
-------------
|  3  |  5  |
-------------
|  9  |  4  |

// BUT, actually is:
|  a  |  b  |
-------------
|  3  |  5  |
-------------
|  4  |  9  |

更新:

列的名称及其编号是相同的,只是顺序不同,我可以更改第二个选择列顺序。

我想要一种方法来忽略默认的sql union行为并告诉它匹配列名,而不是传递的顺序

2 个答案:

答案 0 :(得分:2)

UNION 没有这种功能。

您必须找到一个解决方法:

select concat('a',a) as a, concat('b',b) as b from TEST1 union ( select concat('b',b) as b, concat('a',a) as a from TEST2)

你会有类似的东西:

|  a  |  b  |
-------------
|  a3  |  b5  |
-------------
|  b4  |  a9  |

然后你可以解析它并以编程方式重新排序。

答案 1 :(得分:-1)

表中字段的顺序无关紧要。它是您指定工会的子查询中的字段的顺序。

目前你有:

    select a, b from TEST1
union      |  |
    select b, a from TEST2)

什么时候应该

    select a, b from TEST1
union      |  |
    select a, b from TEST2

表定义中字段排序的唯一重要时刻是select *