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
答案 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);