2

T_Guest、T_Table の 2 つのテーブルがあります。

T_Guestには、ゲストのリストがあります。各ゲストには、ID ( g_no ) とゲストが関連付けられているテーブルの ID ( t_no ) があります。同じテーブルに多くのゲストが関連付けられる可能性があります。

T_Tableにはテーブルのリストがあります。各テーブルには、ID ( t_no ) と、テーブルにある場所の数を示すフィールドn_placesがあります。

質問: SQL クエリを (MS Access で) 作成する必要があります。これにより、まだ空いているテーブル ID のリストが表示されます。


使用可能なテーブルのグループ全体からそのグループに EXCEPTION を実装するだけでなく、最初にいっぱいになっているテーブルのリストを見つけるという考えがあります。

しかし、空いている場所が 0 のテーブルがいくつあるのかを計算するには、テーブルごとに何らかの方法で計算する必要があります。

n_places - NUMBER_OF_GUESTS_ON_THAT_TABLE

最後の 1 つ ( NUMBER_OF_GUESTS_ON_THAT_TABLE) は次のとおりです。

SELECT COUNT(*)
FROM T_Table INNER JOIN T_Guest ON T_Table.t_no = T_Guest.t_no
GROUP BY T_Table.t_no

しかし、私は DIFFERENCE n_places - NUMBER_OF_GUESTS_ON_THAT_TABLEを実装する方法がわかりません

誰かがその種の仕事を手伝ってくれませんか???

4

3 に答える 3

3

ゲスト数を派生テーブルとして使用できます。

SELECT t.t_no, t.n_Places-Nz(g.Guests,0) As FreePlaces
FROM T_Table t
LEFT JOIN (
    SELECT t_no,COUNT(*) as Guests
    FROM T_Guest 
    GROUP BY t_no) g
ON t.t_no = g.t_no

スペースを含むテーブルを取得するには、次を追加できます。

WHERE t.n_Places-Nz(g.Guests,0)>0
于 2012-08-15T16:04:52.410 に答える
1
SELECT [tt].[t_no]
FROM T_Table AS tt
WHERE (SELECT COUNT(*) FROM T_Guest AS tg WHERE tg.t_no = tt.t_no) < tt.n_places

アクセスで動作するはずで、サブクエリを使用しますが、コンテキストを考えると、これは問題になるとは思いません。

于 2012-08-15T16:09:46.643 に答える
0

これは、HAVING 句の典型的な例です。

SELECT t_no FROM T_Guest GROUP BY t_no
HAVING COUNT(*)<(SELECT T_Table.n_Places FROM T_Table WHERE T_Table.t_no=T_Guest.t_no)
于 2012-08-15T16:17:21.370 に答える