【问题标题】:Single result in a query using Left Joins使用左连接的查询中的单个结果
【发布时间】:2009-09-04 13:41:19
【问题描述】:

我目前有一个类似的查询:

SELECT users.fname, users.lname, sales.date 
FROM users
LEFT JOIN sales ON users.id=sales.user

这给了我类似的结果:

Fname | Lname | Date

Jeff  | K     | 2/12/08
Jeff  | K     | 5/18/08
Jeff  | K     | 2/22/09
Bill  | D     | 3/12/08
Bill  | D     | 12/9/08

这是我非常期待的,因为我有多个销售链接到一个用户,但我希望只列出一个用户(也许是一种选择单个结果从哪个销售字段中选择的方法) 这可能吗?我该怎么做?

即:

Fname | Lname | Date

Jeff  | K     | 5/18/08
Bill  | D     | 12/9/08

【问题讨论】:

    标签: sql mysql


    【解决方案1】:
    SELECT users.fname, users.lname, MAX(sales.date)
    FROM users
    LEFT JOIN sales ON users.id=sales.user
    GROUP BY users.fname, users.lname
    

    或者如果您想要销售表中的更多字段:

    SELECT users.fname, users.lname, sales.date, sales.proft
    FROM users
    LEFT JOIN sales ON users.id=sales.user
    AND sales.date = (SELECT MAX(sales.date) FROM sales WHERE user = users.id)
    

    【讨论】:

    • 第一次查询会报错:users.fname, users.lname not in an aggergate function or in group by
    • 应该是“GROUP BY users.fname, users.lname”而不是“GROUP BY sales.date”
    【解决方案2】:
    SELECT users.fname, users.lname, max(sales.date) as date
    FROM users
    LEFT JOIN sales ON users.id=sales.user
    group by users.fname, users.lname
    

    【讨论】:

      【解决方案3】:

      您必须按用户分组,并在销售日期添加一些聚合函数以“控制”在查询结果集中输出哪些可能的日期...

      说你想要最近的日期...

      Select u.fname, u.lname, Max(s.date) LastSale
      FROM users u 
        LEFT JOIN sales s ON u.id=s.user
      Group By u.fname, u.lname
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多