繁体   English   中英

SQL检查链接数据是否存在

[英]SQL Check if linked data exists

我必须创建一个查询,以检查哪些公司已经在某些级别(即其他表)上实现了数据。

现在,我必须检查哪些公司具有链接到它们的地址。

我需要的表链接如下:

  • 公司
  • 机构(通过companyId与公司链接)
  • 地址(通过EstablishmentId与Establishment链接)

我已经创建了一个查询,用于检查公司数据是否已在机构级别实施,我已将此查询粘贴到下面

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM