2

私は、データベース内のテーブルの次のような構造を持っている:SQL-クエリ他の外部キーフィールドを参照する外部キー・フィールドを持つテーブルの

[table workers] 
ID [PK] | worker | combined [FK] 
--------+--------+--------------+ 
1  | John | 2 
--------------------------------+ 
2  | Adam | 1 

[table combined] 
ID [PK] | name | helper [FK] 
--------+----------------------+ 
1  | name1 | 1 
2  | name2 | 2 

[table helper] 
ID [PK] | department [FK] | location [FK] 
--------+-------------+------------------- 
1  |  2   |  3 
2  |  1   |  1 

[table departments] 
ID [PK] | department 
--------+-------------+ 
1  | Development | 
2  | Production | 

[table location] 
ID [PK] | department 
--------+--------------+ 
1  | Paris  | 
2  | London  | 
3  | Berlin  | 

テーブル「労働者は」外国人を持っています-key-field( "combined")。 「結合された」テーブルは、フィールド名と外部キーフィールド「ヘルパー」を有し、これもやはり2つの外部キーフィールドを有するテーブルである。

私の質問は以下の表を取得するための最も簡単なSQL-クエリが何であるかを、今ある:私はすでにそれを試してみました

[table workers] 
ID [PK] | worker | combined-Name| department | location 
--------+--------+--------------+------------+----------- 
1  | John | name2  | Development| Paris 
--------------------------------+------------+----------- 
2  | Adam | name1  | Production | Berlin 

は、いくつかのLEFT-JOINSが、すべて「clearnames」とを取得するには、それを管理していませんでしたテーブル「労働者」このクエリは働くだろう

+0

PKs&FKsはクエリには必要ありません。必要なのは、テーブル(ベースまたはクエリ)内で行が何を言うかです。 PS私は ''クリーンネーム ''あなたが非id値を意味すると思います。明確にするよう努力してください。あなたが私たちの上にその仕事を逸らすように助けを求める表情のような叫び声として特に恐怖の引用符を使用しないでください。 – philipxy

答えて

1

SELECT w.ID, worker, c.name AS `combined-Name`, d.department, l.department as 
location FROM workers w 
LEFT JOIN combined c ON c.ID = w.combined 
LEFT JOIN helper h ON h.ID = c.helper 
LEFT JOIN departments d ON d.ID = h.department 
LEFT JOIN location l ON l.ID = h.location 
GROUP BY w.ID 

私はお好みの出力に名前を設定するASキーワードを使用していました。

これは、提供された構造とデータを使用してローカルでテストされました。

基本的に4つの単純な左結合です。そのIDを選択するのではなく、外部表の名前列を選択します。あなたは、MySQLに新しいしている場合、あなたが持っているMySQLクライアントツールSQLyogを使用することができます

select [workers].worker,[combined].name as combined-name,[departments].name as department,[location].name as location from [workers] 
left join [combined] on [workers].combined = [combined].combined 
left join [helper] on [helper].ID = [combined].helper 
left join [departments] on [departments].ID = [helper].department 
left join [location] on [location].ID = [helper].location 
-1

使用をエスケープする必要があるためc.name

エイリアスが引用されていますグラフィカルインターフェイスを使用してクエリを生成するクエリビルダー

+0

テーブル名の括弧は何ですか?それは非常に無効なSQLです... – FMashiro

+0

@FMashiro FYI .. [link](https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers) –

+0

あなたのコードはerorrを生成しますMySQL、この質問はMsSQLを意図していません: '予期しない文字。 (14桁目の "["付近) 予期しない文字。 (20桁目付近の "]") キーワードが認識されません。 (15桁の "表"の近く) 予期しないトークン。 ( "20"の近くにある "]") SQLクエリ:ドキュメント SELECT * FROM [table] WHERE 1 #1064 - SQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックし、正しい構文が '[table] WHERE 1' at line 1'付近で使用するようにしてください – FMashiro

0

:私たちは、クエリ、次の特殊文字-

関連する問題