我正在尝试在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)
我至少走错了正确的道路,还是这不是正确的方法?
感谢您的帮助。
答案 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