6

ユーザーとバランスの2つのテーブルがあります。

ユーザーテーブルのすべての詳細(すべてのタプルのすべてのフィールド)と、バランステーブルの最新のエントリ(ユーザーIDでリンクされた1つのフィールド)をテーブルに結合したいと思います。

テーブルの構造は次のとおりです。

残高:

+---------+
| Field   |
+---------+
| dbid    |
| userId  |
| date    |
| balance |
+---------+

ユーザー:

+-------------+
| Field       |
+-------------+
| dbid        |
| id          |
| fName       |
| sName       |
| schedName   |
| flexiLeave  |
| clockStatus |
+-------------+

私はこれを行うために何時間も試みてきました、そして私が得ることができる最も近いものは単一のユーザーのために行を返すことです:

SELECT u.*, b.balance, b.date 
FROM users u, balance b 
WHERE
    u.id = b.userId AND
    b.date = (SELECT MAX(date) FROM balance WHERE userId = 'A8126982');

または、すべてのユーザーを選択できますが、残高テーブルの最新のエントリは選択できません。

SELECT u.*, b.balance, b.date 
FROM users u, balance b 
WHERE u.id = b.userId GROUP BY u.id;

私はさまざまなクエリを試しましたが、近づいているようですが、目的の場所に到達できません。

どんな助けでもいただければ幸いです。

4

1 に答える 1

25

作成した最初のSQLを使用できますが、すべてのユーザーが使用できます。

SELECT u.*, b.balance, b.date
FROM users u JOIN balance b ON u.id = b.userId
WHERE b.date = (SELECT MAX(date) FROM balance WHERE userId = u.id);

これは結果を得る最速の方法ではないかもしれませんが、必要なものを提供します。私はアプリのかなりの数の場所で同様のクエリを使用しています。

于 2012-04-19T14:40:44.563 に答える