我知道有很多同样的问题,但我很难让它在多个表连接上工作。我有3张桌子
用户信息
user_id | firstname | lastname
子编号
subnumber | fkuserid
交易
transid | fksubnumber | expires | transdate
继承人我工作的部分
SELECT *
FROM (SELECT *
FROM subtransactions
WHERE Expires < now()
ORDER BY NewSubTrans DESC) AS s
GROUP BY FKSubNum
我要做的是选择订阅已过期的所有用户。确定用户是否过期我从事务表中提取最后一个事务及其子号,fk字段是指向其他表的链接。
答案 0 :(得分:2)
根据您的描述,我认为您根本不需要任何小组。只需使用以下两个连接即可尝试:
SELECT user_id, firstname, lastname
FROM
userinfo
JOIN subnumbers ON userinfo.user_id = subnumbers.fkuserid
JOIN transaction ON subnumbers.subnumber = transaction.fksubnumber
WHERE transaction.expires < NOW()
编辑如果按照以下评论中的建议返回多行,请在选择列表中使用DISTINCT
:
SELECT DISTINCT user_id, firstname, lastname
-- etc...
答案 1 :(得分:1)
这将获得所有user_ids
select distinct(user_id) from userinfo
join subnumbers on userinfo.user_id = subnumbers.fkuserid
join transaction on transaction.fksubnumber = subnumbers.subnumber
where transaction.expires < NOW()
获取完整的用户数据
select * from user where user_id in
(
select distinct(user_id) from userinfo
join subnumbers on userinfo.user_id = subnumbers.fkuserid
join transaction on transaction.fksubnumber = subnumbers.subnumber
where transaction.expires < NOW()
)