mysql - 3 个连接的 mysql 表的最新记录

标签 mysql sql join

这几天我一直在绕这个问题,这让我抓狂。我已经使用 max(date) 和左连接找到了部分答案,但尚未达到正确的结果,因此将非常感谢您的帮助。

我有 3 张 table :-

inventory
id
lots of other fields...

sale_price
id
date
*ticket_type_id
*inventory_id

ticket_type
id
ticket_name

每次促销价格更改时,sale_price 表都会更新日期和新的门票类型。我想做的就是显示:-

  1. 查找 sale_price 中的最新记录
  2. 显示与此相关的库存信息
  3. 显示与此相关的ticket_name

我得到的查询是:-

    $result = "
    SELECT DISTINCT inv.*, tt.ticket_name, MAX(sp.date) AS spdate 
               FROM sale_price sp 
               LEFT 
               JOIN ticket_type tt 
                 ON sp.ticket_type_id = tt.id
               JOIN inventory inv 
                 ON sp.inventory_id = inv.id                  
              GROUP 
                 BY sp.inventory_id
     ";

但它显然不起作用。我真的很感激您能提供的任何帮助,以及(如果不是太多的话)我出错的地方的一些细节。

非常感谢您的期待!

最佳答案

如果您只想知道所有记录的最新记录,那么您可以使用以下查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;
WHERE
    s.date = (
        SELECT
            MAX(s1.date)        
        FROM
            sale_price s1
    ) 

如果您需要每个库存项目的最新记录,那么您必须通过在子查询的 WHERE 子句中使用 inventory_id 的相等性来扩展此查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;    
WHERE
    -- gives us the newest date per inventory_id
    s.date = (
        SELECT
            MAX(s1.date)
        FROM
            sale_price s1
        WHERE
            s.inventory_id = s1.inventory_id
    )

顺便说一下,这是一个相关子查询,它可能会变慢。

关于mysql - 3 个连接的 mysql 表的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586664/

相关文章:

SQL - 从表中删除重复行

MySQL - 连接 View 和表

mysql - 打印两个表的数据

mysql - 如何使用逗号分隔值的交集进行选择?

MySQL匹配和插入功能

mysql - 选择的正确语法是什么?

mysql - MySql 多列索引的工作原理

python - PyMySQL 将(文件)数据加载到远程 MySQL 实例时出现错误/异常

mysql - 带有内部连接的 SQL 更新查询给出了超过锁定等待超时

Mysql Full Outer Join 临时表