在MySql和SQL Server中使用子查询时,必须给子查询语言取一个别名。
例如直接使用
select count(*) from (select * from table_1)
会提示错误,在MySql中提示错误:
Every derived table must have its own alias
在SQL Server中提示错误:
Incorrect syntax near ')'.
正确的用法应该是
select count(*) from (select * from table_1) table_2
<select id="getUser" parameterType="map"
resultType="dd.client.model.Users">
SELECT * FROM
(SELECT
a.ID AS ID,
a.CUSTOMER_ID AS CUSTOMER_ID,
a.ACCOUNT AS ACCOUNT,
a.PASSWORD AS PASSWORD,
a.NAME AS NAME,
a.SERVICE_END_TIME AS SERVICE_END_TIME,
a.LAST_LOGIN_TIME AS LAST_LOGIN_TIME,
a.LOGIN_FAIL_TIMES AS LOGIN_FAIL_TIMES,
a.IS_ENABLE AS IS_ENABLE,
a.ISDEL AS ISDEL,
a.CREATE_TIME AS CREATE_TIME,
a.CREATE_ID AS CREATE_ID,
a.UPDATE_TIME AS UPDATE_TIME,
a.UPDATE_ID AS UPDATE_ID,
a.MOBILE AS MOBILE,
a.EMAIL AS EMAIL,
a.SEND_MOBILE AS SEND_MOBILE,
a.SEND_EMAIL AS SEND_EMAIL,
a.IS_LIMITED AS IS_LIMITED,
a.LMT_IP AS LMT_IP,
a.LMT_START_TIME AS LMT_START_TIME,
a.LMT_END_TIME AS LMT_END_TIME,
a.LMT_WEEK_TIME AS LMT_WEEK_TIME,
a.IS_CUSTOMERGROUP AS IS_CUSTOMERGROUP,
a.IS_ADMIN AS IS_ADMIN,
IFNULL(b.CUSTOMER_NAME,'0') AS customer_name
<!-- b.SYSTEM_NAME -->
FROM users a LEFT JOIN customer b
ON a.CUSTOMER_ID = b.ID
) AS v_users
WHERE CUSTOMER_NAME = #{customerName}
AND ACCOUNT = #{userName}
</select>
AS v_users 是必须的,即使外层查询没有用到,也必须给子查询起一个别名,否则无法执行