環境が無いので試してませんが、こんな感じかな。
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に無いものをどうするかは考慮してません。
>■テーブル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
お礼
お礼がとっても遅くなってしまいました。すみません。 無事解決しています。