我在 myqsl 中有一组函数,我需要编写 oracle 版本。
在我遇到limit 1问题之前一切进展顺利。我认为我对限制的查询是问题所在,但无法找出问题所在。你能帮我个忙吗?
MySQL版本
SELECT concat(fld_name, ' ', fld_surname)
INTO info
FROM tbl_customer
WHERE fld_flat_id = flatId and fld_type = typeId
order by fld_own_date desc limit 1;
Run Code Online (Sandbox Code Playgroud)
Oracle版本(导致问题)
SELECT Q1.*
FROM (
SELECT ROWNUM AS RWNR2, Q2.*
FROM (
SELECT (NAME || ' ' || SURNAME)
INTO info
FROM TB_CUSTOMER
WHERE FLAT_ID = flatId AND TYPE = typeId
ORDER BY OWN_DATE DESC
) Q2
WHERE ROWNUM <= 1
) Q1
WHERE Q1.RWNR2 > 0;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我知道表名称和字段不同,此预览中的值是正确的。
小智 5
该INTO子句必须位于最外层SELECT而不是内层。而且不需要两层嵌套,一层派生表和一层rownum <= 1就足够了。
所以它应该是这样的:
SELECT full_name
INTO info
FROM (
SELECT (NAME || ' ' || SURNAME) as full_name
FROM TB_CUSTOMER
WHERE FLAT_ID = flatId
AND TYPE = typeId
ORDER BY OWN_DATE DESC
) Q2
WHERE ROWNUM <= 1;
Run Code Online (Sandbox Code Playgroud)
请注意,如果内部选择不返回任何内容,它仍然可能会失败并出现“找不到行”错误。
| 归档时间: |
|
| 查看次数: |
12531 次 |
| 最近记录: |