2011-06-27 7 views
1

この同じ質問のヒープがあることはわかっていますが、複数のテーブル結合で動作するのに問題があります。私が持っている3つのテーブルグループごとに最大のマルチテーブル

user_id | firstname | lastname 

subnumbers

subnumber | fkuserid 

取引

transid | fksubnumber | expires | transdate 

のuserinfo

HERESに一部私が働いている

SELECT * 
FROM (SELECT * 
FROM subtransactions 
WHERE Expires < now() 
ORDER BY NewSubTrans DESC) AS s 
GROUP BY FKSubNum 

私がしようとしているのは、契約が切れているすべてのユーザーを選択することです。ユーザーが期限切れであるかどうかを判断するために、トランザクションテーブルから最後のトランザクションをそのサブ番号でプルすると、fkフィールドは他のテーブルへのリンクになります。

+0

結合を試しましたか? – afaolek

答えて

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() 

EDITを以下のコメントで示唆されているように、それは複数の行を返す場合、選択リストにDISTINCTを使用し、::ちょうどこの二つが結合して、それを試してみてください

SELECT DISTINCT user_id, firstname, lastname 
    -- etc... 
+0

IMHOの場合、1人のユーザーが1つ以上のサブ番号を持ち、トランザクション – Greenisha

+0

@Greenishaがあると、1人のユーザーあたり複数の行が返されます。このインスタンスでは 'DISTINCT'を使って簡単に解決できます。なぜなら、完全なサブスクリプション情報のみのユーザーを引き出すわけではないからです。 –

+0

うん、そしてこの場合、あなたのソリューションはより良いです – Greenisha

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() 
) 
+0

は以前と異なります - このクエリはユーザーごとに1つの行を返します – Greenisha

関連する問題