- ベストアンサー
SQLの取得方法とは?
- SQLの取得方法について分からない場合、以下の条件を考慮してテーブルのデータを取得する方法を検討する必要があります。
- 条件として、テーブルAのキーとテーブルBのキーの繋がりを考慮し、テーブルAの情報とテーブルBの情報を結合する必要があります。
- また、テーブルBの項目2が同じ値のデータがある場合は、項目2が同じデータの情報も取得する必要があります。SQLやPL/SQLを使用してこの結果を取得できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
環境が無いので試してませんが、こんな感じかな。 SELECT A.キー, 'テーブルA' AS フラグ, A.項目1, NULL AS 項目2, NULL AS 項目3, NULL AS 同じキー, NULL AS 同じ値 FROM テーブルA AS A UNION ALL SELECT B.キー, 'テーブルB' AS フラグ, NULL AS 項目1, , B.項目2, B.項目3, C.キー AS 同じキー, C.項目3 AS 同じ値 FROM テーブルB AS B LEFT JOIN テーブルB AS C ON B.項目2 = C.項目2 AND B.キー <> C.キー ORDER BY 1, 2, 4 ※テーブルBにあってテーブルAに無いものをどうするかは考慮してません。
その他の回答 (1)
- yamada_g
- ベストアンサー率68% (258/374)
>■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は別レコードとして取得します。 という条件からテーブルBのうち、テーブルAに存在するキーのみのレコードを取得すると思われるので、 yorozu_yaさんのSQLの一部だけ変えて、 SELECT A.キー, 'テーブルA' AS フラグ, A.項目1, NULL AS 項目2, NULL AS 項目3, NULL AS 同じキー, NULL AS 同じ値 FROM テーブルA A UNION ALL SELECT B.キー, 'テーブルB' AS フラグ, NULL AS 項目1, B.項目2, B.項目3, C.キー AS 同じキー, C.項目3 AS 同じ値 --FROM テーブルB AS B FROM (SELECT * FROM テーブルB B WHERE EXISTS (SELECT * FROM テーブルA A WHERE A.キー = B.キー)) B LEFT JOIN テーブルB C ON B.項目2 = C.項目2 AND B.キー <> C.キー ORDER BY 1, 2, 4; で希望の結果になると思われます。 (Oracleだとテーブル別名指定時にASは使えないので消してあります) この回答でうまくいくようであれば、ベストアンサーはyorozu_yaさんにお願いしますm(__)m
お礼
お礼がとっても遅くなってしまいました。すみません。 無事解決しています。