1. 达梦数据库不支持在 WHERE 子句中直接使用表别名(CLR)来引用列。在达梦中,表别名只能在 FROM 子句中使用,而不能在 WHERE 子句中使用。
错误用法:
SELECT "clr"."ID",
"clr"."DELETED_AT",
"clr"."RECORD_ID",
"clr"."USERNAME",
"clr"."USER_ID",
"clr"."EVENT_TIME",
"clr"."STATUS",
"clr"."IP",
"clr"."TOKEN_ID",
"clr"."REASON",
"clr"."ERRS"
FROM bz25i_customer_login_record
JOIN (SELECT "USER_ID",
MAX(EVENT_TIME) AS max_event_time
FROM bz25i_customer_login_record
WHERE (USER_ID IN ('b079d03cbad046dda528191a5d7df167',
'a879ac872f674f2fa2bf5ad615abadd2',
'6580f0bd2c6842ef9ea884d1c0ba8c04',
'0480b3b80f0b415dbfe963b28ee267fc',
'bbc7e624916c44ab99e0883f722e450b') )
AND (DELETED_AT IS NULL)
GROUP BY "USER_ID") AS latest
ON bz25i_customer_login_record.USER_ID = latest.USER_ID
AND bz25i_customer_login_record.EVENT_TIME = latest.max_event_time
WHERE (clr."DELETED_AT" IS NULL)
AND "clr"."DELETED_AT" IS NULL正确用法:
SELECT bz25i_customer_login_record."ID",
bz25i_customer_login_record."DELETED_AT",
bz25i_customer_login_record."RECORD_ID",
bz25i_customer_login_record."USERNAME",
bz25i_customer_login_record."USER_ID",
bz25i_customer_login_record."EVENT_TIME",
bz25i_customer_login_record."STATUS",
bz25i_customer_login_record."IP",
bz25i_customer_login_record."TOKEN_ID",
bz25i_customer_login_record."REASON",
bz25i_customer_login_record."ERRS"
FROM bz25i_customer_login_record
JOIN (SELECT "USER_ID",
MAX(EVENT_TIME) AS max_event_time
FROM bz25i_customer_login_record
WHERE (USER_ID IN ('b079d03cbad046dda528191a5d7df167',
'a879ac872f674f2fa2bf5ad615abadd2',
'6580f0bd2c6842ef9ea884d1c0ba8c04',
'0480b3b80f0b415dbfe963b28ee267fc',
'bbc7e624916c44ab99e0883f722e450b') )
AND (DELETED_AT IS NULL)
GROUP BY "USER_ID") AS latest
ON bz25i_customer_login_record.USER_ID = latest.USER_ID
AND bz25i_customer_login_record.EVENT_TIME = latest.max_event_time
WHERE bz25i_customer_login_record."DELETED_AT" IS NULL2. 达梦数据库VARCHAR类型字符长度与MySQL不一致
达梦数据库varchar 可以设计单位 byte 和 char
varchar(50) 约等于16个汉字 + 2个英文数字
varchar(50 char) 50个汉字