単一の行を返す必要があるクエリで結合する必要がある 2 つのテーブルがあります。1 つのテーブルから、常に存在する行を選択します。2 番目から 2 つの行を選択する必要があります。そのうちの 1 つは常に存在し、もう 1 つは時々しか存在しません。
2 番目のテーブルの両方の行が存在する場合はこれを機能させることができますが、2 番目の行が存在しない場合は機能しません。
これが私のスキーマの簡単な例です
表 1: 会社
COMPANY_ID int
------------
|COMPANY_ID|
------------
| 1|
| 2|
------------
表 2: 設定
COMPANY_ID int,
PREFERENCE_ID int,
PREFERENCE_VALUE varchar
-------------------------------------------
|COMPANY_ID|PREFERENCE_ID|PREFERENCE_VALUE|
-------------------------------------------
| 1| 1| foo|
| 1| 2| bar|
| 2| 1| baz|
-------------------------------------------
私が探しているのは、COMPANY_ID = 1 の場合は両方の PREFERENCE_ID を持つ行を返し、COMPANY_ID = 2 の場合は 1 つの PREFERENCE_ID と空のセル (またはゼロまたは任意のデフォルト値) を持つ行を返すクエリです。
次のようなクエリを使用しようとしています
select c.*, p1.PREFERENCE_VALUE as VALUE1, p2.PREFERENCE_VALUE as VALUE2
from
COMPANIES
join PREFERENCES p1 on c.ID = p1.COMPANY_ID
join PREFERENCES p2 on c.ID = p2.COMPANY_ID
where
p1.PREFERENCE_ID = 1 and
p2.PREFERENCE_ID = 2 and
COMPANIES.ID = 1;
COMPANY_ID = 1 (PREFERENCE_ID 1と2 がある場合) でこのクエリを実行すると、正常に動作します。COMPANY_ID = 2 で実行すると、空のセットが返されます。2 番目の結合に左結合を使用しようとしましたが、それは機能しません何も変えません。
返してほしいもの:
COMPANY_ID = クエリの 1:
------------------
|ID|VALUE1|VALUE2|
------------------
| 1| foo| bar|
------------------
COMPANY_ID=2 の場合、VALUE2 に対しては何でも返すことができます。null、空白、0、気にしない:
------------------
|ID|VALUE1|VALUE2|
------------------
| 2| baz| |
------------------
TIA にアドバイスを求める。