1

リレーショナルSQLは初めてです。複数の種類のアカウントを持っている顧客の名前を返すクエリを見つけようとしています。

顧客:

+------------+--------------+ 
| cid        | Name         | 
+------------+--------------+ 
| 1          | Bob          |
| 2          | John         | 
| 3          | Jane         | 
+------------+--------------+ 

アカウント:

+------------+--------------+ 
| aid        | type         | 
+------------+--------------+ 
| 1          | Checking     |
| 2          | Saving       | 
| 3          | CD           | 
+------------+--------------+ 

トランザクション:

+------------+--------------+--------------+ 
| tid        | cid          | aid          | 
+------------+--------------+--------------+ 
| 1          | 1            | 1            | 
| 2          | 2            | 1            | 
| 3          | 1            | 2            | 
| 4          | 2            | 3            | 
| 5          | 3            | 1            | 
+------------+--------------+--------------+

これらのテーブルを使用すると、クエリはBobとJohnを返す必要があります。このようなクエリの書き方に問題があります。具体的には、顧客が持っているアカウントの数をカウントし、テーブルに新しい列を追加せずにアカウントが異なるかどうかを比較するにはどうすればよいですか?

4

1 に答える 1

3

さて、これは私のテストデータ構造を使用したSQLFiddleで機能するようです。実際のデータ構造で試してみて、探しているものが得られるかどうかを確認してください。

SELECT name FROM customers c WHERE EXISTS(
  SELECT DISTINCT aid FROM transactions
  WHERE cid = c.cid
  HAVING COUNT(DISTINCT aid)>1
)
于 2012-11-18T00:53:18.483 に答える