- - PR -
テーブルの結合が上手くできません
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-23 20:23
ACCESS 2003 を使っています。(Windows2000)
[TEST1]テーブル TIME VALUE 01 5 02 3 03 4 04 1 05 1 [TEST2]テーブル NO TIME AAA 01 AAA 05 BBB 01 BBB 02 BBB 04 CCC 01 CCC 03 2つのテーブル(TEST1,TEST2)を結合して 下記のように取得したいと思っています。 TIMEの01〜05を必ず表示したいと思っています。 [ほしい結果] NO TIME VALUE AAA 01 5 AAA 02 0 AAA 03 0 AAA 04 0 AAA 05 1 BBB 01 5 BBB 02 3 BBB 03 0 BBB 04 1 BBB 05 0 CCC 01 5 CCC 02 0 CCC 03 4 CCC 04 0 CCC 05 0 TIMEフィールドでLEFT JOINすれば、 [TEST1]側のすべての行が表示される(右にない行はnull)と思ったんですが・・・。 SELECT TEST2.NO,TEST1.TIME,TEST1.VALUE FROM TEST1 LEFT JOIN TEST2 ON TEST1.TIME=TEST2.TIME ORDER BY TEST2.NO,TEST1.TIME [上記SQLでの結果] NO TIME VALUE AAA 01 5 AAA 05 1 BBB 01 5 BBB 02 3 BBB 04 1 CCC 01 5 CCC 03 4 と結果が返ってきます。 どのようなSQL文だと、上に書いたような結果が返ってくるでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-02-23 21:10
求める結果は JOIN じゃないですね。
と、単純にこういうことではないのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-23 21:29
この質問は単に技術的な興味ですか。
それとも業務を行っている上で出てきた問題ですか? 後者であれば、この質問の中に出てこなければならないテーブルがもう一つあるんじゃないですかねぇ。 仮にそれをTEST3と呼びましょうか。 TEST2はTEST1とTEST3の関連の情報を表すテーブルになっているんだと思います。 [TEST3]テーブル NO COL1 COL2 AAA XXX XXX BBB XXX XXX CCC XXX XXX こういうテーブルがあるでしょ? 結論としては、TEST1とTEST3を結合するのが正しい。 | ||||||||||||
|
投稿日時: 2006-02-23 23:38
TIMEは数字と仮定しています。
私はACCESSのSQLを知らないので、問題は「ACCESSがこのSQLを処理できるか?」ですね。
[ メッセージ編集済み 編集者: とんくま 編集日時 2006-02-23 23:42 ] | ||||||||||||
|
投稿日時: 2006-02-24 12:34
で期待している結果が得られると思います。
は、Accessでは明示的に記述することが出来ませんが、CROSS JOINと同意です。 なので、期待する結果は得られないでしょう。 | ||||||||||||
|
投稿日時: 2006-02-26 21:57
じゃんぬさん、
一郎さん、 とんくまさん うにくまさん、返事ありがとうございます。 返事遅くなってすみません。 金曜の朝に返事を書いてたんですが、書き終わる前に出張に行く時間になってしまい 返事することができませんでした>< とんくまさんのを試したのですが、 Accessでは、 COALESCEは IIF(ISNULL()) への置き換えができたのですが、 INNER JOIN の条件の 0=0 がダメみたいで上手く行きませんでした。 うにくまさんのを試したところ期待している結果ができました。 ありがとうございます。 確かに期待していた結果だったのですが、 私の質問の仕方が悪かく、自分が本当にほしい結果にはなりませんでしたので、 再度、質問します。 最初の質問では、TEST1、TEST2の2つテーブルを書いていましたが、 本当は、テーブルは1つになります。
SELECT TIME, SUM(KAISU) as [TOTAL] FROM TEST_TBL GROUP BY TIME 01 5 02 4 03 1 の結果を付けて、以下のように出力したいと考えています。
よろしくお願いします。 | ||||||||||||
1
