我正在尝试使用相应表中的匹配名称更新一个表中的名称(如果他们的ID号匹配)。
Required Trait wasn't added to App\Api\V1\Models\User
这是返回的错误:
UPDATE Table1 t1
SET NAME = SELECT (t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
当与更新分开运行select语句时,它返回SQL Error: ORA-00936: missing expression
不是有效的标识符,即使它作为表中的列存在。
我觉得我匹配PSOUG的语法。
答案 0 :(得分:2)
左括号需要在select
之前,而不是在UPDATE Table1 t1
SET NAME = (SELECT t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
之后:
create table table1 (id number, name varchar2(10));
insert into table1 values (1, null);
insert into table1 values (2, 'Old name');
insert into table1 values (3, null);
create table table2 (id number, name varchar2(10));
insert into table2 values (1, 'New name 1');
insert into table2 values (2, 'New name 2');
整个子查询位于括号内。您链接到的PSOUG页面在其第三个示例中显示的是“基于单个查询值的更新”;以及the examples in the documentation显示的内容。
快速演示,简单的表格设置:
Error report -
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
问题的原始代码获得:
UPDATE Table1 t1
SET NAME = (SELECT t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
3 rows updated.
select * from table1;
ID NAME
---------- ----------
1 New name 1
2 New name 2
3
上面的代码有效:
table1
从评论中您可能认为您可能需要在子查询中另外引用UPDATE Table1 t1
SET NAME = (
SELECT t2.name
FROM table1 t1
JOIN table2 t2
ON t1.ID = t2.ID);
Error report -
SQL Error: ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
,但如果这样做,则会丢失更新与子查询行之间的关联,即使表正在更新还有一个别名:
table1
如果代码不正确,则子查询中的t1
和table1
别名与外t1
子句中的update ...
或OpenCL
无关。 / p>
答案 1 :(得分:0)
只有在table2中,每个id都有一个唯一的名称,这样才能正常工作。
UPDATE Table1 t1
SET NAME = (SELECT t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
例:
在以下情况下返回查询。如果table2具有类似
name id
x 1
y 1