如何正确地LEFT JOIN用户进行交易

时间:2011-04-16 22:30:06

标签: php mysql sql join

   SELECT *
     FROM users
LEFT JOIN payments ON payments.user_id = users.user_id
    WHERE payments.id = (SELECT max(p2.id) 
                           FROM payments p2 
                          WHERE payments.user_id = p2.user_id)

我当前使用的查询是用来选择用户信息以及上一次交易。问题是我想选择用户即使他们没有数据库中的事务,我该怎么做?

我正在玩的桌面结构非常简单:

USERS - user_id, name
PAYMENTS - id, user_id, method

3 个答案:

答案 0 :(得分:2)

你可能会更好(表现明智)加入像这样的子查询:

SELECT *
  FROM users u
LEFT JOIN 
(Select user_id, max(id) from payments group by user_id) p
ON p.user_id = u.user_id

通过在Where子句中添加任何条件,您将其转换为内部联接

答案 1 :(得分:1)

尝试这样的事情:

SELECT users.*, payments.*
  FROM users
LEFT JOIN payments ON payments.user_id = users.user_id
                  AND payments.id = (SELECT max(p2.id) 
                                       FROM payments p2 
                                      WHERE payments.user_id = p2.user_id)

结果集中有两列“user_id”,一列来自users表,另一列来自付款。 payments.user_id将为null,但users.user_id应具有值。

答案 2 :(得分:0)

为什么每个人都在做那些疯狂的事情?

select u.user_id u_uid, u.name, p.user_id p_uid, p.method from users u left join payments p on (u.user_id = p.user_id);