私は次の3つのテーブルを持っています:
表 A:
id VARCHAR(32) | value VARCHAR(32) | groupId INT
abcdef | myValue1 | 1
ghijkl | myValue2 | 2
mnopqr | myValue3 | 1
表 B:
id VARCHAR(32) | value VARCHAR(32) | userId INT
abcdef | myValue4 | 1
uvwxyz | anotherValue | 1
表 C:
id VARCHAR(32) | someOtherColumns...
abcdef
ghijkl
mnopqr
...
uvwxyz
テーブル A と B は am:n-association に使用されるため、両方のテーブルの「id」列は同じフィールド (テーブル c の「id」列) を参照します。私がやりたいことは(たとえば)...テーブルAのすべてのエントリを選択することですwhere groupId = 1
SELECT * FROM TableA WHERE groupId = 1
また、テーブル B のすべてのエントリを選択しますwhere userId = 1
SELECT * FROM TableB WHERE userId = 1
それはすべて問題ありません...しかし、次のように選択ステートメントが難しくなります: 両方の選択結果をマージして最初の結果の値を置き換えるにはどうすればよいですか? 例えば:
表 A のすべてのエントリを選択するwhere groupId = 1
と、abcdef と mnopqr が得られます。表 B で userId = 1 のすべてのエントリを選択すると、abdef (さらに uvwxyz) も取得されます。
これで、テーブル B の abcdef の値が、テーブル A の選択結果の値に置き換わるはずです。また、結果に uvwxyz-entry が追加されます。
最後に、次のテーブルを生成するクエリを探しています。
id VARCHAR(32) | value VARCHAR(32)
abcdef | myValue4 -- myValue1 from the select-statement in tableA should be overwritten
mnopqr | myValue2 -- from table A
uvwxyz | anotherValue -- from table B
誰かがこれを行う方法を知っていることを願っています...提案を事前にありがとう! ところで...単一の(長い)selectステートメントを使用してこれを実現する機会があれば素晴らしいでしょう。