UPDATE Table2 t2, (SELECT req, MAX(time) AS time FROM Table1) t1 SET t2.atime = t1.time WHERE t1.req = t2.req; 这句Orcle的SQL哪错了
时间: 2024-04-15 15:30:04 浏览: 70
在 Oracle 中,你不能在 UPDATE 语句中使用子查询的方式进行更新。相反,你可以使用 MERGE 语句来实现类似的功能。以下是使用 MERGE 语句来更新的示例:
```sql
MERGE INTO Table2 t2
USING (SELECT req, MAX(time) AS time FROM Table1 GROUP BY req) t1
ON (t1.req = t2.req)
WHEN MATCHED THEN
UPDATE SET t2.atime = t1.time;
```
这段代码将根据 `Table1` 中每个 `req` 的最大 `time` 值来更新 `Table2` 中的 `atime` 列。请确保将表名和列名与你的实际情况相匹配。
相关问题
update Table2 t2,(select req,max(time) as time from Table) t1 set t2.atime = t.time where t1.req = t2.req 这句SQL哪错了
这句 SQL 有几个错误:
1. 在子查询中,你使用了 `max(time)`,但是没有指定 `time` 列是从哪个表中获取的。你需要将 `max(time)` 改为 `max(t1.time)`。
2. 在主查询中,你使用了 `t.time` 来引用子查询的结果,但是子查询的表别名是 `t1` 而不是 `t`。你需要将 `t.time` 改为 `t1.time`。
3. 在主查询中,你使用了 `t.time` 来更新 `t2.atime` 列,但是在子查询中并没有选择 `time` 列。你需要将 `t.time` 改为 `t1.time`。
正确的 SQL 语句应该是:
```sql
UPDATE Table2 t2, (SELECT req, MAX(time) AS time FROM Table1) t1
SET t2.atime = t1.time
WHERE t1.req = t2.req;
```
请注意,我假设你想要更新的表是 `Table2`,并且有一个名为 `atime` 的列。另外,我将子查询的表名从 `Table` 改为了 `Table1`,以避免与关键字冲突。如果表名或列名不正确,请根据实际情况进行调整。
阅读全文