将两列中的数据合并为一列进行排序

时间:2011-12-14 19:25:21

标签: mysql select union

我正在尝试在SELECT中使用UNION两列,而在第三列中使用别名。

我还需要检索与WHERE子句匹配的数据,然后按别名列(MLS_SORT)排序。

这个以及我尝试过的变体都不起作用。

SELECT *
FROM
(SELECT MLS_AGENT_ID AS MLS_SORT FROM mlsdata)

UNION

(SELECT MLS_OFFICE_ID AS MLS_SORT FROM mlsdata)

WHERE (MLS_AGENT_ID = $agent_narid) OR (MLS_OFFICE_ID = $office_narid)      

ORDER BY MLS_SORT

这部分确实有效,并使用正确的值创建MLS_SORT别名,但我无法弄清楚如何将结果限制为上面的WHERE子句:

(SELECT MLS_AGENT_ID AS MLS_SORT FROM mlsdata)

UNION

(SELECT MLS_OFFICE_ID AS MLS_SORT FROM mlsdata)

我至少走错了正确的道路,还是这不是正确的方法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

诀窍是理解UNION的语法:查询UNION查询

我想你想要:

SELECT MLS_SORT
FROM
(
    SELECT MLS_AGENT_ID AS MLS_SORT 
      FROM mlsdata
     WHERE MLS_AGENT_ID = $agent_narid

    UNION

    SELECT MLS_OFFICE_ID AS MLS_SORT 
      FROM mlsdata
     WHERE MLS_OFFICE_ID = $office_narid
)
ORDER BY MLS_SORT

要将两个ID子集合并到一个结果集中,请对它们进行排序。

但是,整个查询看起来会给出一个两行结果集 - 代理一行,办公室另一行。那是你要的吗?

您的逻辑有效地将代理ID和办公室ID编号转换为单个结果集。这在你的申请中有意义吗?

答案 1 :(得分:2)

尝试这样的事情:

    select * from
    (
    (SELECT MLS_AGENT_ID AS MLS_SORT 
     FROM mlsdata
     WHERE (MLS_AGENT_ID = $agent_narid)
     )
    UNION
    (SELECT MLS_OFFICE_ID AS MLS_SORT 
     FROM mlsdata
     WHERE (MLS_OFFICE_ID = $office_narid)
     )) a
    ORDER BY MLS_SORT

修改

备用订单

ORDER BY 1