如何重写具有连接子查询的SQL查询

时间:2011-09-22 17:32:54

标签: mysql join views subquery

我有一个SQL查询,它有一个具有连接的子查询。我想在没有子查询的情况下重写查询,以便我可以创建一个视图。 MySQL不允许SELECT语句,其中FROM是子查询。

这可能吗?我已经尝试删除外部选择并在子查询中移动组。这部分有效,但有些数据不正确。

select *
from (SELECT r.id, r.dateAdded, r.listingId, r.rating, r.username, r.valid, tbl_data.nameShort, tbl_data.desk, d.model, d.hardware, d.serial, l.appVersion, r.photoUrl, r.comment
      FROM tbl_ratings r
      JOIN tbl_data on r.listingId = vi_data.id
      JOIN tbl_devices d on r.serial = d.serial
      JOIN tbl_log l on l.serial = d.serial
      ORDER BY d.serial, l.dateAdded DESC) x
group by id
order by dateAdded DESC

提前致谢!

2 个答案:

答案 0 :(得分:1)

是否如此简单:

SELECT     r.id, r.dateAdded, r.listingId, r.rating, r.username, r.valid,
           tbl_data.nameShort, tbl_data.desk, d.model, d.hardware,
           d.serial, l.appVersion, r.photoUrl, r.comment
      FROM tbl_ratings r
      JOIN tbl_data on r.listingId = vi_data.id
      JOIN tbl_devices d on r.serial = d.serial
      JOIN tbl_log l on l.serial = d.serial
      GROUP BY r.id
      ORDER BY r.dateAdded DESC

此外,您对“vi_data”的引用不是查询中的任何其他内容

答案 1 :(得分:0)

group by子句更改为group by r.id。由于您从派生表(子查询)中进行选择,因此db无法判断该派生表中只有一个“id”字段 - 它只能看到子查询中指定的列标题,即{{1 }}