- ベストアンサー
異なる項目を持つ複数の表を一つに結合して表示する方法
- SQLを使用して、異なるデータ列を持つ複数の表を結合し、日付順に表示する方法について教えてください。
- 具体的には、date項目以外に異なる項目を持つtable1とtable2を結合し、table1のcommentとtable2のnikkiを同じ列に出力したいです。
- テーブルを一つにする解は除いた上で、異なる項目を持つ複数の表を結合するための効果的な方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 2つのテーブルの結合に関してです
お世話になります PHP5,MySql5.0.33にて開発を行っています 2つのテーブルの結合部分で困っています TABLE1 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1 2/27 2/20 10 2 2/27 2/20 10 ---------------------------------- TABLE2 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1 2/21 2/26 5 2 2/21 2/27 5 ---------------------------------- 上記2つのテーブル(TABLE1/TABLE2)から TABLE1のDATE1=2/27より過去の行とTABLE2のDATE2=2/27より過去の行を 取得したいのですが上手くいかず…(下SQLで記述しています) SELECT DISTINCT TABLE1.* FROM TABLE1,TABLE2 WHERE TABLE1.ID=TABLE2.ID AND TABLE1.ID=1 AND (TABLE1.DATE1<='2009/2/27' OR TABLE2.DATE2<='2009/2/27') (結合のそもそもの理解が間違っているかも知れませんが…;) 宜しくお願いします
- ベストアンサー
- MySQL
- SQL 表の結合
SQLで2つの表から条件に合ったデータを取り出し、同じ列に表示させたいのですが、 どうやっても外部結合のようにすることしかできませんでした。 取り出したデータを縦に結合?させることはできるのでしょうか? 例) dataは月の上旬中旬下旬でそれぞれabcとします。 入力値はmonthとdayで、これらからuriageを選択します。 dataの取りうる値はa,b,c,ab,bc,abcとします。 table:A 売上表 table:B 上旬中旬下旬判断 --------------------------- ----------- key | data | month | uriage day | data --------------------------- ----------- 1 | a | 1 | 500 1 | a 2 | ab | 1 | 800 … | … 3 | bc | 1 | 400 10 | a 4 | c | 1 | 100 11 | b 5 | abc | 1 | 900 … | … … | … | … | … 31 | c --------------------------- ----------- month = 1 , day =5のとき table:Bより SELECT data FROM table:B WHERE day = 5 としてdata "a" を得ます。 この"a"と同じdataを持つuriageを表示させたいので SELECT uriage FROM table:A WHERE month = 1 AND data = (SELECT data FROM table:B WHERE day = 5) として table:query1 -------- uriage -------- 500 -------- を得ました。 ここまでは良いのですが、これに付け加えて、 table:Bから取り出したdata "a"をtable:Aのdataが含むとき(data = a,ab,abcのとき) その全てのuriageを表示させたく、 ワイルドカードを使おうと SELECT uriage FROM table:A WHERE month = 1 AND data = %(SELECT data FROM table:B WHERE day = 5)% 等としてみたのですが、上手くいきませんでした。 そこで、別のクエリーを作って SELECT uriage FROM table:A WHERE month = 1 AND data = 'ab' AND data = 'abc' として table:query2 --------- uriage --------- 800 --------- 900 ---------- を得ました。 そして、最後に、 得られた2つの表をまとめて --------- uriage --------- 500 --------- 800 --------- 900 --------- としたいのですが、 SELECT uriage, uriage FROM query1, query2 とすると ------------------ uriage | uriage ------------------ 500 | 800 500 | 900 ------------------ となりますし、UNIONは使い方がよくわからないためシンタックスエラーにしかならず...。 そもそも、縦に結合?はできるのでしょうか??? あれこれ試してみたのですが、詰まってしまったので、 どなたか知恵をお貸しください。
- ベストアンサー
- PostgreSQL
- 複数の外部結合
こんにちは、外部結合の仕方についてお聞きしたいのですが、 このSQL1で抽出されたデータにさらに TABLE3テーブルのデータを追加したくSQL2を作成したのですが、 うまくいきません。 ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すればよいのでしょうか? SQL1--------- TABLE1.[tamp] [Child], TABLE2.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] SQL2---------- TABLE1.[tamp] [Child], TABLE2.*, TABLE3.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] LEFT OUTER JOIN [p].[Product] TABLE3 ON TABLE1.[Code]=TABLE3.[Code]
- ベストアンサー
- Oracle
- SQL 外部結合について
EXCELでODBC接続で外部データを取り込み、クエリテーブルを作成するところまではできるのですが、MicrosoftQueryを使って外部結合をしようとすると、テーブルが3個以上ある場合は外部結合できませんとエラーが表示されます。 直接SQLをさわれば出来るのかと思い、 SELECT フィールド名1, フィールド名2, ... FROM (((TABLE1 LEFT JOIN TABLE2 ON TABLE1.NO = TABLE2.NO)LEFT JOIN TABLE3 ON TABLE1.NO = TABLE3.NO)LEFT JOIN TABLE4 ON TABLE1.NO = TABLE4.NO)LEFT JOIN TABLE5 ON TABLE1.NO = TABLE5.NO を入力したのですが、「ORA-00942: 表またはビューが存在しません」というエラーが発生しました。 いろいろ調べてみたのですが全くの初心者なもので本当に困っております。 どなたかアドバイス等よろしくお願いします。
- ベストアンサー
- Oracle
- オラクル結合SQL
こんばんわ。オラクル初心者です。 オラクル9.1で、下記のようにtable1とtable2を結合して、view1(oracleビュー) を作成したいのですが、どのようなSQLがよいでしょうか。 なかなかうまい方法がなくてこまっています。 table1 no 項目 その他 その他1 1 1 1 2 1 3 .....省略 table2 no 項目 種別 結果 1 1 01 3 1 1 02 8 1 1 03 7 1 2 01 9 1 2 02 6 1 2 03 2 1 3 01 1 ...... view1 良い例 no 項目 結果1 結果2 結果3 1 1 3 8 7 ←種別01 02 03を順にいれる 1 2 9 6 2 1 3 1............ select table1.no,table1.項目,・・・ from table1,table2 where table1.no = table2.no and table1.項目 = table2.項目 ↑おおよそこのような感じになるとは思ってます。 何とか頑張ったのですが、下記のようになってしまうことが 多かったです・・・。どこかSQLがわるいようです。 view1 悪い例 no 項目 結果1 結果2 結果3 1 1 3 8 7 1 1 3 8 7 1 1 3 8 7 1 2 9 6 2 1 2 9 6 2 1 2 9 6 2 1 3 1............ もしご存知の方いらっしゃいましたら、助かります。よろしくお願いいたします。
- ベストアンサー
- Oracle
- 3テーブル外部結合&やっかいな条件
ORACLE10gを使用しています。 下記のようなTABLE1,2,3があります。 TABLE1の全てを抽出し、TABLE2に該当レコードがあれば、TABLE2のBUMON_CDを使ってTABLE3のNMを取得したいです。 TABLE1とTABLE2の結合条件は TABLE1.CD = TABLE2.CD AND TABLE2.DATE >= TABLE1.DATE TABLE2に該当レコードが複数ある場合はTABLE1.DATEに最も近いレコード(TABLE2)を抽出したいのです。 サブクエリと外部結合を使用するのは想像できるのですが、TABLE1,TABLE2ともに同一CDのレコードが複数存在する中からTABLE1とTABLE2のレコードをどのようにぶつければいのか分からなくなってしまいました。アドバイスお願いします。 【TABLE1】 DATE |CD -------------- 2006/08/15|01 2006/08/20|01 2006/08/03|02 【TABLE2】 CD|DATE |BUMON_CD ---------------------- 01|2006/08/17|0102 01|2006/08/18|0101 【TABLE3】 ID|KBN_CD|NM ----------------------- 1 |0101 |サービス部門 1 |0102 |営業部門 【求める結果】 CD|BUMON_CD|NM ----------------------- 01|NULL |NULL 01|0101 |サービス部門 02|NULL |NULL
- ベストアンサー
- Oracle
- 複数テーブルの削除
お世話になります。 うまい資料が見つからなかったので質問させてください。 例えば、下記のようなテーブルが3つあったとします。 <table1> id name date <table2> id tel <table3> id etc name,date,tel,etcは同タイミングで一括に登録され、3テーブルともに共通のidで保存されます。 この時、table1のdate(日付が入ります)が30日以上経過しているデータについて、いずれのテーブルからも削除したいと思っています。 こんな場合、どんなSQL文を書けば良いのでしょうか? お分かりになる方、何卒よろしくお願いしますm(_ _)m
- ベストアンサー
- MySQL
- 表の結合
今、スケジュール表を作っていますが、どうしても解らないので教えて下さい。 -スケジュール表の仕様- 1.以下のテーブルがあります。 DT_SCHEDULE(スケジュールデータ) DT_USER(ユーザデータ) MS_HOLIDAY(休日マスタ) 2.テーブルの内容は以下の通りです。 DT_SCHEDULE(スケジュールデータ) USER_ID INTEGER * NEN INTEGER * TSUKI INTEGER * HI INTEGER * HOLIDAY INTEGER TITLE VARCHAR(20) CONTENT VARCHAR(1000) DT_USER(ユーザデータ) USER_ID INTEGER * USER_NAME VARCHAR(20) MS_HOLIDAY(休日マスタ) NEN INTEGER * TSUKI INTEGER * HI INTEGER * HOLIDAY_NAME VARCHAR(20) ※*はキー項目です。 3.以下の条件です。 ・DT_SCHEDULE(スケジュールデータ)をもとに表示する。 ・指定した年月のスケジュールを表示する。 ・DT_SCHEDULE(スケジュールデータ)とMS_HOLIDAY(休日マスタ)に同じ日付が登録されている場合、DT_SCHEDULE(スケジュールデータ)のスケジュールを表示する。 ・ユーザ名は、DT_USER(ユーザデータ)を参照し表示する。 ・日付昇順で表示する。 4.求めたい結果は以下の通りです。 NEN TSUKI HI HOLIDAY ※MS_HOLIDAY(休日マスタ)から表示する場合、1固定 USER_ID USER_NAME TITLE ※MS_HOLIDAY(休日マスタ)から表示する場合、HOLIDAY_NAME CONTENT ※MS_HOLIDAY(休日マスタ)から表示する場合、、空白 以下、わからない点です。 1.UNIONで結合したのですが、MS_HOLIDAY(休日マスタ)の項目が不足している。(HOLIDAY、CONTENT) 2.そもそもUNIONで結合する事が問題なのか? 以上、よろしくお願い致します。
- ベストアンサー
- その他(データベース)
- 項目値の連結...?
いつもお世話になってます。 つい先日も助けていただいたのですが、また困ったことになってしまいました。 何回も聞くのもどうかと思い、4日程悩みましたがお手上げになってしまいました。 [DATE1][DATE2][DATE3]にそれぞれ日付が入っています。 [DATE1]に日付が入っていたら'りんご'、[DATE2]に日付が入っていたら'みかん'、[DATE3]に日付が入っていたら'かき'と、1つの項目に(新しい項目?)集約して表示させたいです。 実際のデータ ------------------------ ID、DATE1、DATE2、DATE3 ------------------------ 1、2005/10/11、空、空 2、空、空、2005/10/15 3、空、2005/10/12、2005/11/1 4、空、2005/10/20、空 ------------------------ 出したいデータ ----------------- ID、新規項目 ----------------- 1、りんご 2、かき 3、みかん・かき ← 4、みかん ----------------- ID3のように集約させるのが難しくてできません。 下記のようなSQLを以前教えていただいたので、やってみましたが、[DATE2][DATE3]のようにだぶっている場合は対応できません。 select ID,case when DATE1 <> '' then 'りんご' when DATE2 <> '' then 'みかん' when DATE3 <> '' then 'かき' end as 新規項目 from TABLE1 こういう場合、どういうSQLを書けば良いでしょうか? よろしくお願いします。
- ベストアンサー
- SQL Server
- SQL SEREVER で選択した固定値との結合について質問です。
SQL SEREVER で選択した固定値との結合について質問です。 日付と紐付けたデータを1ヶ月分出力するSQLを作成しています。 紐付け対象となるデータに、1ヶ月毎日のデータが存在するわけではありません。 そこで、固定値として2010年7月であれば、 2010-07-01~2010-07-31 までの日付を全て固定値として取得 (対象データは行で取得したいのでUnionで繋いでいく)して、 その日付と紐づく対象データを外部結合しようと考えました。 SqlServerの場合、固定値のみを取得した場合 ダミーテーブルを使用するということができないようなので、 取得した固定値との紐付け時に下記???のところの指定がわかりません。 Select '2010-07-01' 日付 Left Join 結合対象テーブル On 結合対象テーブル.日付 = ???.日付 他のやり方で実現可能なのかもしれませんが、調べてもわかりませんでした お解りになる方いらっしゃいましたら、教えていただければと思います。
- ベストアンサー
- SQL Server
- 【MFC-J737DN】複合機の初期化を図ってから複合機の調子が悪い。ファームウェアの更新をしたいが方法がわからないので教えていただきたい。
- パソコンもしくはスマートフォンのOSは何ですか? どのように接続されていますか? Wi-Fiルーターの機種名は何ですか? 関連するソフト・アプリがあれば教えてください。 電話回線の種類はIP電話です。
- 質問:【MFC-J737DN】複合機の初期化を図ってから複合機の調子が悪い。ファームウェアの更新をしたいが方法がわからないので教えていただきたい。 環境:パソコンもしくはスマートフォンのOSは何ですか? どのように接続されていますか? Wi-Fiルーターの機種名は何ですか? 関連するソフト・アプリがあれば教えてください。 電話回線の種類はIP電話です。
お礼
早々のご回答ありがとうございます! unionという便利な機能をはじめて知りました。 テーブルの再定義しかないかなと考え始めていたため、 大変たすかります。