【发布时间】:2014-08-20 17:45:21
【问题描述】:
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。
我正在使用 join 从三个表中获取结果。现在在结果中我得到了 RMA_ID 的多条记录,但我只想要基于 TBL_RMA_SHIPPING.SHIP_ADMIN_STATUS 的最新记录。
我在查询中收到此错误。请帮帮我。
SELECT RMA_ENQUIRY.RMA_ID,
PART_NUMBER_TBL.PART_NO,
PART_SERIAL.SERIAL_NUM,
RMA_ENQUIRY.RMA_TYPE,
RMA_ENQUIRY.RMA_FAILURE_TYPE,
RMA_ENQUIRY.RMA_COMPLAINT,
RMA_ENQUIRY.RMA_ADDITIONAL_INFORMATION,
RMA_ENQUIRY.RMA_REC_DATE,
RMA_ENQUIRY.RMA_STATUS,
RMA_ENQUIRY.RMA_SHIP_STATUS,
(select TBL_RMA_SHIPPING.SHIP_ADMIN_STATUS from TBL_RMA_SHIPPING where TBL_RMA_SHIPPING.SHIP_RMAID=RMA_ENQUIRY.RMA_ID order by TBL_RMA_SHIPPING.UPDATE_STATUS_DATE),
RMA_ENQUIRY.[USER_ID],
TBL_RMA_SHIPPING.SHIP_DETAILS
FROM RMA_ENQUIRY
LEFT JOIN PART_NUMBER_TBL
ON RMA_ENQUIRY.RMA_PART_NO=PART_NUMBER_TBL.PARTID
LEFT JOIN PART_SERIAL
ON RMA_ENQUIRY.RMA_SERIAL_NO=PART_SERIAL.SERIAL_ID
LEFT JOIN TBL_RMA_SHIPPING ON RMA_ENQUIRY.RMA_ID=TBL_RMA_SHIPPING.SHIP_RMAID
WHERE RMA_ENQUIRY.RMA_STATUS='A' AND RMA_ENQUIRY.RMA_SHIP_STATUS=1
ORDER BY RMA_ENQUIRY.RMA_REC_DATE DESC
【问题讨论】:
-
你有这么好的连接设置......然后把这个位扔到选择语句中:“(从 TBL_RMA_SHIPPING 中选择 TBL_RMA_SHIPPING.SHIP_ADMIN_STATUS 其中 TBL_RMA_SHIPPING.SHIP_RMAID=RMA_ENQUIRY.RMA_ID 按 TBL_RMA_SHIPPING.UPDATE_STATUS_DATE 排序), " 将其更改为 join 并正确调用该字段......它会消除这个错误和一堆混乱,可能也会让这一切变得更快。在 select 语句中按子查询排序没有逻辑意义
-
我猜这是 SQL server 而不是 mySQL 作为 top 和 For XML 被引用。如果要加入表是左联接不返回行并且必须有值,为什么需要在选择中进行子查询?如果是这样,您确定您的加入在正确的列上吗? fi 所以您需要更改查询,以便它根据该行的相关数据返回一个和唯一一个记录/列。
标签: sql sql-server join sql-order-by