【发布时间】:2016-04-20 02:49:55
【问题描述】:
我有两个数据表:
CREATE TABLE tbl1 (
ID NUMBER,
LABEL VARCHAR2(50)
);
CREATE TABLE tbl2 (
ID NUMBER,
SRC VARCHAR2(400)
);
INSERT INTO tbl1 VALUES (1, 'foobar');
INSERT INTO tbl1 VALUES (2, 'foo');
INSERT INTO tbl1 VALUES (3, 'bar');
INSERT INTO tbl2 (SRC) VALUES ('foo: yeah');
INSERT INTO tbl2 (SRC) VALUES ('foobar: nope');
我正在尝试通过匹配 tbl1 中最长的匹配字符串来更新 tbl2 的 ID 字段。我的意图是“foo: yes”条目的 ID 应为 2,而“foobar: nope”条目的 ID 应为 1:
UPDATE tbl2 t2
SET t2.ID = (SELECT t1.ID
FROM tbl1 t1
WHERE t2.SRC LIKE t1.LABEL || '%');
这样做会导致错误:“单行子查询返回多行”。这对我来说很有意义,所以我尝试了这个:
UPDATE tbl2 t2
SET t2.ID = (SELECT t1.ID
FROM tbl1 t1
WHERE t2.SRC LIKE t1.LABEL || '%'
AND ROWNUM=1
ORDER BY LENGTH(t1.LABEL) DESC);
但现在我收到此错误:“缺少右括号”。 在这种情况下我不明白这个错误,括号格式正确。
【问题讨论】: