[英]SQL Check if linked data exists
我必须创建一个查询,以检查哪些公司已经在某些级别(即其他表)上实现了数据。
现在,我必须检查哪些公司具有链接到它们的地址。
我需要的表链接如下:
我已经创建了一个查询,用于检查公司数据是否已在机构级别实施,我已将此查询粘贴到下面
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,它告诉我其他表中是否存在ID
但是在这种情况下,我在地址表中没有必要的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
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
正确语法。
希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.