2017-04-12 13 views
0

特定のレベル、つまり他のテーブルにどの企業が既にデータを実装しているかを確認するクエリを作成する必要があります。SQLリンクされたデータが存在するかどうかを調べる

今のところ私はどの企業にリンクされているアドレスがあるかチェックする必要があります。

私は次のようにリンクされている必要がありますテーブル:(establishmentIdを通じて設立とリンク)

  • 会社
  • 設立(企業IDを通じて会社とリンク)
  • 住所

Iすでに企業のデータが事業所レベルで実装されているかどうかを確認するクエリを作成しました。このクエリを貼り付けたのは、

0123です

私はすでに以下のペーストを試していますが、システムにチェックインすると結果が正しく表示されません。

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 

アドレスレベルでデータが実装されているかどうかを正確に示すすべての企業のリストを取得するにはどうすればよいですか?


EDIT


私はこの質問はこの1つに非常に似て理解:住所で利用できるsql join which tells me if ID exists in other table

しかし、この場合には、私が持っていない必要がFK(企業ID)表。

私は、私はそれがよりこのような(ここで、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

IDが他のテーブルに存在するかどうかを知らせる[sql join]の重複可能性があります。(http://stackoverflow.com/questions/8418462/sql-join-which-tells-me-if-id-exists-in-他のテーブル) –

答えて

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という正しいシンセックスが欠けています。

これが役に立ちます。

+0

あなたの迅速な対応に感謝しますが、あなたの提案を試してみると前と同じ結果になります。 – Gravinco

関連する問題