mysql - 从mysql表中获取当前所有有效记录

标签 mysql sql

我在 MySQL 数据库中有两个表

表 1 表示 table1 的字段 (id, name) 记录例如

###############
id |  name
1  |  Chair
2  |  Table
3  |  Bed
###############

和表 2 说 table2 字段 (id, table1_id, date, price)

##############################
id |table1_id| date     |  price
1  |  1  |  2013-09-09  |  500
2  |  1  |  2013-08-09  |  300
3  |  2  |  2013-09-09  |  5100
4  |  2  |  2013-08-09  |  5000
5  |  3  |  2013-09-09  |  10500
################################

我要实现的是从表2中检索所有商品的最新价格

SQL的结果应该是这样的

##############################
id |table1_id| date     |  price
1  |  1  |  2013-09-09  |  500
3  |  2  |  2013-09-09  |  5100
5  |  3  |  2013-09-09  |  10500
################################

我可以通过查询对它们进行排序

SELECT * FROM table2 GROUP BY table1_id ORDER BY date DESC

但似乎 GROUP BY 在 ORDER BY 子句之前运行,所以结果不符合要求 提前致谢

最佳答案

您可以使用子查询限制 ON 子句中的连接条目,因此,仅连接最新的条目:

SELECT t2.id, t1.id, t1.name, t2.date, t2.price 
  FROM table1 t1 JOIN table2 t2 
    ON (t1.id = t2.table1_id 
      AND t2.id = (
        SELECT id 
        FROM table2 
        WHERE table1_id = t1.id 
        ORDER BY table2.date DESC 
        LIMIT 1
    ));

结果:

|1|1|Chair|2013-09-09|  500|
----------------------------
|3|2|Table|2013-09-09| 5100|
----------------------------
|5|3|  Bed|2013-09-09|10500|

关于mysql - 从mysql表中获取当前所有有效记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19089963/

相关文章:

mysql - mysql删除查询出错

c# - 使用 FluentNhibernate 基于列的 Mysql 排名

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

sql - oracle中的READ COMMITTED数据库隔离级别

php - 我如何聚合表中的数据以使用每个月作为键显示基于类别的产品总和

SQL Server 2008 : Cannot Insert new column in the middle position and change data type

sql - 如何在 PostgreSQL 中测试运行 UPDATE 语句?

mysql - 检查mysql是否有索引null

php - UTF-8贯穿始终

php - 这条sql语句抛出错误