SQL检查链接数据是否存在

时间:2017-04-12 13:22:36

标签: mysql sql

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

现在我必须检查哪些公司有与之相关的地址。

我需要的表格链接如下:

  • 公司
  • 成立(通过companyId与公司联系)
  • 地址(通过establishmentId与建立联系)

我已经创建了一个查询,检查公司的数据是否已在企业级别实施,我已在下面粘贴此查询

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

1 个答案:

答案 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的正确同义词。

希望这会有所帮助。