我必须创建一个查询,检查哪些公司已经在某些级别(即其他表)上实现了数据。
现在我必须检查哪些公司有与之相关的地址。
我需要的表格链接如下:
我已经创建了一个查询,检查公司的数据是否已在企业级别实施,我已在下面粘贴此查询
SELECT c.id as 'Company Id',
CASE e.companyId WHEN c.id THEN 1 ELSE 0 END as 'EstablishmentImplementation'
FROM company c LEFT JOIN establishment e ON c.Id = e.companyId
我已经尝试了下面粘贴的查询,但是当我签入系统时,我从中获得的结果并不正确。
SELECT c.id as 'Company Id',
CASE a.establishmentID WHEN e.ID THEN 1 ELSE 0 END as 'AdressesImplementation'
FROM company c JOIN establishment e ON c.Id = e.companyId
LEFT JOIN address a ON e.Id = a.establishmentId
如何获得所有公司的清单,以确定是否已在地址级别实施数据?
修改
我理解这个问题与此问题非常相似:sql join which tells me if ID exists in other table
但在这种情况下,我没有在地址表中提供必要的FK(companyId)。
如果我将示例从其他问题转换为我使用它的格式,则看起来更像是这样(其中A =公司,B =建立,C =地址):
A B C
-- --------- ----------
ID ID | FKID ID | FKID
-- ---|----- ----|------
1 9 | 3 10 | 8
2 8 | 3 11 | 8
3 7 | 4 12 | 9
4 6 | 4 13 | 9
结果就是这样:
-----------------
ID | hasB | hasC
-----------------
1 no no
2 no no
3 yes yes
4 yes no
答案 0 :(得分:0)
SELECT c.id as 'Company Id',
CASE WHEN a.establishmentID=e.ID THEN 1 ELSE 0 END as 'AdressesImplementation'
FROM company c
INNER JOIN establishment e ON c.Id = e.companyId
LEFT JOIN address a ON e.Id = a.establishmentId
OR
SELECT c.id as 'Company Id', 'EstablishmentImplementation'
FROM company c
INNER JOIN establishment e ON c.Id = e.companyId
INNER JOIN address a ON e.Id = a.establishmentId
尝试以上代码。
在这里,您错过了CASE WHEN
的正确同义词。
希望这会有所帮助。