【发布时间】:2021-01-20 11:41:30
【问题描述】:
这个标题含糊不清,并没有完全涵盖问题,但我不知道该怎么说。基本上我有以下几种情况:
我有两张桌子:
表 1:公司。显示公司父子结构
| company | parent-company |
|---|---|
| A | NULL |
| B | A |
| C | A |
| D | A |
| E | B |
表 2:帐户。与公司关联的帐户
| company | account-id | account-currency |
|---|---|---|
| B | 1234 | EUR |
| B | 5678 | GBP |
| C | 7777 | EUR |
我想要检索输入公司的子公司,为了争论,该公司是 A 公司。在这些子公司中,我想知道是否有任何帐户与它们相关联。我不想知道是哪些,只要有与之关联的帐户即可。
我目前的查询如下:
SELECT *
FROM COMPANY A
left join ACCOUNTS B
ON A.company = B.company
WHERE A.parent-company = 'A'
这为我提供了与母公司 A 关联的子公司 + 与这些子公司关联的每个帐户。这意味着对于 B 公司,我得到两行,两个帐户。
| company | parent-company | account-id | account-currency |
|---|---|---|---|
| B | A | 1234 | EUR |
| B | A | 5678 | GBP |
| C | A | 7777 | EUR |
| D | A | NULL | NULL |
如果我在该查询中添加一个 case 语句,仅表示是否有帐户,则查询如下所示:
SELECT A.company
,A.parent-company
,CASE WHEN (B.account-id IS NULL) AND (B.account-currency IS NULL)
THEN 'N'
ELSE 'Y'
END AS account-present
FROM COMPANY A
left join ACCOUNTS B
ON A.company = B.company
WHERE A.parent-company = 'A'
结果如下表:
| company | parent-company | account-present |
|---|---|---|
| B | A | Y |
| B | A | Y |
| C | A | Y |
| D | A | N |
似乎我正在到达某个地方,但我真正想要的是: 每家公司一行,指示是否有帐户。
| company | parent-company | account-present |
|---|---|---|
| B | A | Y |
| C | A | Y |
| D | A | N |
有人知道怎么做吗?我已经尝试了很多东西,但我无法得到我的 代码工作。
【问题讨论】: