- ベストアンサー
SQLで社員テーブルと所属テーブルを結合して重複を排除する方法
- SQLを使用して、社員テーブルと所属テーブルを結合し、重複を排除して社員番号と社員氏名の一覧を表示する方法について教えてください。
- Oracle8iを使用しています。
- ハッシュタグ: SQL, データベース, 社員テーブル, 所属テーブル, 結合
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- bin-chan
- ベストアンサー率33% (1403/4213)
- gonta_goma
- ベストアンサー率50% (37/73)
- Mizyu
- ベストアンサー率41% (245/593)
関連するQ&A
- SQLのテーブル結合
SQLのSELECTについて質問です。 テーブルA、B、Cから情報を取得し、下記の画面イメージを表示させたいのですが、 どのようにテーブルを結合すればよいか判りません。 どなたかご教示ください・・・。よろしくお願いします。 #テーブルCから組名を取得するような処理は画面表示のロジックで行います。 #テーブルA、Bの結合についてのみ、教えていただきたいです。 条件 ・氏名と、所属情報の○×を表示したい ・DISTINCT等、重たい処理は避けたい 画面イメージ |氏名 |赤組|白組|青組| ------------------------------ |山田太郎|○ |× |× | |山田花子|× |○ |○ | テーブルA |個人ID|氏名 | -------------------- |000001|山田太郎| |000002|山田花子| テーブルB |個人ID|組コード| -------------------- |000001|1110 | |000002|1111 | |000002|1112 | テーブルC |組コード|組名| ------------------ |1110 |赤組| |1111 |白組| |1112 |青組|
- ベストアンサー
- Oracle
- SQLの使用方法について(動的な結合条件の変更方法について)
SQL Server2005を使用しています。 以下のような動作を実現したいのですが、どのようなSQLとなるのでしょうか? 以下のような構成のテーブルがあるとします。 テーブルA 分類1(PK) 分類2(PK) 名前 1 空文字 山田 1 1 山田太郎 1 2 山田花子 2 空文字 鈴木 テーブルB 番号(PK) 分類1 分類2 100 1 空文字 101 1 1 外部から受け取るパラメータはテーブルBの番号です。 次の番号を受け取った際に、以下の結果を取得したいのですが、 どのようなSQLとなるのでしょうか? 番号100 ↓ 山田 山田太郎 山田花子 番号101 ↓ 山田太郎 以下の様なSQLを作成して試してみたのですが、番号2をJOINの条件として指定しているため、 番号100の時に望む結果を得ることが出来ませんでした。 SELECT * FROM テーブルA AS A LEFT JOIN ( SELECT * FROM テーブルB WHERE 番号 = パラメータ ) AS B ON A.分類1 = B.分類1 AND A.分類2 = B.分類2 サブクエリのB.分類2が空文字の場合は、JOINの条件から省くようなことは可能なのでしょうか?
- ベストアンサー
- SQL Server
- 場合によって条件を変えるSQL
ORACLE環境下、SQLにて以下のような条件でデータを取得したいです。 AテーブルとBテーブルを結合して、Bテーブルから名称を取得する。 <Aテーブル> id (key) 番号1 番号2 A01 001 n0001 A02 null n0002 <Bテーブル> code(key) 名前 番号1 番号2 c0001 太郎 001 n0001 c0002 次郎 002 n0002 (1)A.番号が入力されていれば A.番号1=B.番号1 AND A.番号2=B.番号2を条件にする (2)A.番号が入力されていなければ A.番号=B.番号を条件からはずす。 A.番号2=B.番号2 のみで検索する。 <欲しい結果> A01→太郎を取得 A02→次郎を取得 入力されていたら条件に加え、入力されていなかったら 条件から外す、というSQLを教えていただけないでしょうか。 よろしくお願いいたします。
- 締切済み
- Oracle
- SQL SERVER2005のJOINについて
はじめて投稿させていただきます。 SQL SERVER2005のJOINの仕方で困っています。 どなたか、アドバイスをお願いできないでしょうか。 テーブルA CD NAME KBN 1 山田太郎 1 2 山田花子 1 3 山田次郎 2 4 山田五郎 1 テーブルB CD NENGETU DAY1 DAY2 DAY3 ~ DAY31 1 200811 ◎ ◎ 1 200812 ◎ 3 200810 3 200811 ◎ 4 200811 ◎ 欲しい結果の条件と結果は テーブルAは、KBN = 1 のみ テーブルBは、NENGETU = 200811 但し、テーブルBには、テーブルAに存在しないCDもあります。 CD NAME KBN DAY1 DAY2 DAY3 ~ DAY31 1 山田太郎 1 ◎ ◎ 2 山田花子 1 4 山田五郎 1 ◎ 以上の結果を取得したいSQLを書きたいのですが、 Select CD,NAME,KBN,DAY1,DAY2,DAY3~,DAY31 From テーブルA LEFT OUTER JOIN テーブルB On テーブルA.CD = (Select テーブルB.CD From テーブルB Where テーブルB.NENGETU = 200811) Where テーブルA.KBN = '1' Order By テーブルA.CD とかでやると、CDの1が複数出たりして おかしい結果になってしまいます。 どなたか、アドバイスをお願いできないでしょうか。
- ベストアンサー
- SQL Server
- 【SQL】existsでの商演算
閲覧ありがとうございます. 現在SQLでデータベースの勉強をしているのですが,existsを用いて商演算を行おうとしてわからない箇所が出てきたので,その点に関しての質問をさせて頂きます. 例として,A,Bと名付けた2つのテーブルを最初に用意します. [テーブル1(名前:机1)] | 番号 |氏名|年齢| 好物 | --------------------------- | 12 | あ | 1 | りんご | | 23 | い | 1 | すいか | | 23 | い | 1 | りんご | | 45 | え | 3 | すいか | | 45 | え | 3 | りんご | [テーブル2(名前:机2)] | 好物 | ---------- | りんご | | すいか | この机1を机2で割ることで,この要素を含む氏名を取り出したいと考えて,以下のようなSQL文を実行しました. select 氏名 from 机1 A where exists( select * from 机2 B where A.好物 = B.好物); [求めている結果表示] | 番号 |氏名| ------------- | 23 | い | | 45 | え | [実際に表示された結果] | 番号 |氏名| ------------- | 12 | あ | | 23 | い | | 23 | い | | 45 | え | | 45 | え | 実行すると (1)氏名が重複で表示されてしまう (2)「りんご」のみ好物の「あ」も表示されてしまう という問題が発生してしまい,色々と調べて考えたものの,結局分からなかったので,今に至ります. 長文・駄文すみませんでした. まだSQLを学び初めて少ししか経っていないので,全く違うことをしていたらすみません.よろしければ,問題解決へのアドバイスをお願いします.
- ベストアンサー
- PostgreSQL
- テーブルのマージSQLに関して
初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル 社員番号、日付、内容、所属、時間、結果 Bテーブル 社員番号、日付、内容、理由 ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。
- ベストアンサー
- Oracle
- SQLに関して
環境:Oracle 11g SQLで階層問い合わせに関して教えて下さい。 今、ある部品テーブルに対し、直下のレコードのみを抽出しようとしていますが、ある共通の 構成をA部品群、B部品群の中に入れた場合、なぜか同じ結果が2回表示されてしまいます。 以下にサンプルのデータとSQLを作成しましたので、何がおかしいか教えて頂きたいと思います。 【Aテーブル】 品目番号,親品目番号 A A1,A B,A B1,B ↑ A部品群 C D,C B,C B1,B ↑ B部品群 ※ Bが共通の構成です。 【SQL】 select 品目番号 as 下位品目番号,親品目番号 from A_TABLE where 品目番号 != 'B' AND 親品目番号 = 'B' start with 品目番号 = 'B' connect by prior 品目番号 = 親品目番号 【結果】 下位品目番号,親品目番号 B1,B B1,B 2回表示されてしまいます。 単純に親品目番号=’B’としてしまえば正しく拾えますが、上記のSQLを多様している為、 何が間違っているか教えて頂ければと思います。 初歩的な質問で申し訳ありませんが、教えて下さい。
- ベストアンサー
- Oracle
- 集計するためのSQL構文を教えて下さい。
初めて投稿します。よろしくお願いします。 現在、ストアドプロシージャとSQLの勉強をしながら作業を行なっています。そのため説明不足などありましたらご指摘願います。 [環境] データベース:SQLServer2005 SQL作成環境 :SQLServerManagementStudioExpress(9.00.2047.00) 望んでいる出力結果 病室,タイプ,10/01水,10/02木,10/03金,10/04土,10/05日 -------------------------------------------------------------- 10,集合3,○○太郎,○○太郎,○○太郎,○○太郎,□□花子 △△太郎,△△太郎,□□花子,□□花子 □□花子,□□花子 11,個室A, ××太郎,××太郎,××太郎 12,個室B, ○○次郎,○○次郎,○○次郎,○○次郎 ※指定した日付範囲で、全病室を対象に入院中患者、入院予定患者を 病室単位で求めたいです。 関係するテーブル情報 ※マスタテーブルは、名称+Mで表記します。 ※データテーブルは、名称+Tで表記します。 [病室] 病室M( 病室番号 INT タイプコード INT ) [日付] ストアドのパラメータで集計開始日と終了日を受け取るため、 その集計範囲も動的に変わります。 ※上記の結果では、 集計日(自):2008/10/01 集計日(至):2008/10/05 を受け取った場合を想定し記述しています。 [入院者氏名] 患者T( 患者コード INT 患者氏名 VARCHAR(128) 通院種別 TINYINT(1:通院,2:入院) 退院区分 TINYINT(1:入院,2:退院) 入院日 SMALLDATETIME 退院日 SMALLDATETIME ) [患者と病室を紐付けるテーブル] 病室割当T( 割当番号 INT 患者番号 INT 病室番号 INT ) 長文となり申し訳ありません。 上記の情報でストアドを組もうとしているのですが、 SQL含め勉強不足な状態です。 実現するための考え方、方法、アドバイス等を頂きたいです。 よろしくお願い致します。
- ベストアンサー
- SQL Server
- ACCESSのSQLの書き方
ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)
- ベストアンサー
- その他(データベース)
- SQL文で他テーブルの件数も同時に求めたい
SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA ID name Age -------------- 1 太郎 20 2 二郎 35 3 花子 26 テーブルB ID memo ------------------ 1 私は男です 1 東京に住んでます 2 友達が3人います 3 私は彼氏がいます 3 先日TDLに出かけました。 3 ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- ブラザー製品DCP-J983Nでインクが検知されません。何度やっても問題が解決しない状況です。
- お使いの環境はWindows10で、無線LANで接続されています。関連するソフト・アプリは特にありません。
- インクが検知されない問題に関してブラザー製品の専門家に相談したいです。
お礼
なるほど、Maxで抽出してから・・ですね。 それなら思った通りの結果が返ってきます。 考え方を変える、というのがなかなか出来なくて。 参考になりました。どうもありがとうございました♪