下面的mysql语句错在哪里?如何修复,请保留table3_alias表里面的LIMIT: SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id LEFT JOIN ( SELECT id,status FROM table3 WHERE table1_id = table1.id ORDER BY dtOpt DESC LIMIT 0,1 ) AS table3_alias ON table3_alias.id = table1.id;
时间: 2023-06-14 21:07:36 浏览: 80
修复Mysql数据库错误
这个语句的问题在于在子查询中使用了 `table1.id` ,但是这个 id 并不在子查询的范围内,因此会报错。要修复这个语句,可以通过将子查询的条件中的 `table1.id` 改为 `table2.table1_id` ,并且将子查询的 ON 条件改为 `table3_alias.status = table3.status` 来实现限制结果集的效果。修复后的语句如下:
```
SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN (
SELECT id, status
FROM table3
WHERE table1_id IN (
SELECT table1_id
FROM table2
WHERE table2.table1_id = table1.id
)
ORDER BY dtOpt DESC LIMIT 0,1
) AS table3_alias ON table3_alias.status = table3.status;
```
这个语句先通过子查询,找到每个 `table1` 对应的最新的 `table3` 记录的 id 和 status,然后再通过左连接,将 `table3_alias` 表连接到结果集中。这样就可以保留 `table3_alias` 表里面的 `LIMIT` 了。
阅读全文