我有两个表需要加入一个需要返回单行的查询。从一个表中,我将选择永远存在的行。从第二个开始,我需要选择两行,其中之一将始终存在,而另一行仅有时存在。
我可以在第二个表中的两行都存在但第二行不存在的情况下进行这项工作。
这是我的架构的简化示例
表 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 时返回具有一个 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 运行它时,它返回一个空集。我尝试使用左连接进行第二次连接,但这并没有不要改变任何东西。
我希望它返回:
COMPANY_ID = 1 在查询中:
------------------
|ID|VALUE1|VALUE2|
------------------
| 1| foo| bar|
------------------
对于 COMPANY_ID=2,它可以为 VALUE2 返回任何内容。null,空白,0,我不在乎:
------------------
|ID|VALUE1|VALUE2|
------------------
| 2| baz| |
------------------
TIA 的任何建议。