問題
kunさんの答え
2008年04月01日18時28分59秒.pdf
- サブクエリでやりたいこと→一人暮らしでない人のidの集合を出したい
- このクエリでやりたいこと→一人暮らしでない人で、且fam IS NULLなら世帯主。
- やりたいことはわかるのだけれども、サブクエリのSelect節のcon_idはグループ化されたもので統一である値か集約値しかもってこれないはずなので、これではエラーになるのでは。
mysqlで試してみた(chiemin)
mysql> select con_id from Consumers group by address having count(*)>=2;
+--------+
| con_id |
+--------+
| 1 |
| 3 |
+--------+
2 rows in set (0.00 sec)
偶然だけど、世帯主だけ出ちゃいました。これは世帯主が偶然一番最初に挿入されていたから。mysqlの場合はSelect節に集約値以外の属性が来た場合はグループの一番最初のタプルの値を出すみたいです。多分。
ゼミ中に出たコメント
- この問題って何がやりたいんだろう…世帯主だけにメールを送るだけならわかるんだけど、世帯主を削除しちゃうって…なぜ?
- せっかく人のIDと世帯主の参照IDがあるのにaddressが一致するかどうかで同じ世帯に住んでいることを決めてしまってよいのか?
- 例えば2世帯住宅とかという場合はないのだろうか?
- 1人住まいでない世帯主を求める問合せ
SELECT c1.con_id
FROM Consumers c1, Consumers c2
WHERE c1.con_id = c2.fam
- でもこれだとこの問題ならいいけど(親子関係が一階層だから)、任意の階層を持ってたりしたらまずいよね(木構造みたいに)
- その辺はどうやらこのテーブルの設計自体がSQL向きでないもよう(サポートページより)
コメント
最終更新:2008年04月02日 22:58