2016-05-09 6 views
2

私は以下のjson配列に類似したスキーマのmysqlテーブルを持っています。他の列に基づく値を持つ一時的な列を持つSELECT

[ 
    { "id": 1, "firstName": "Charles Montgomery", "lastName": "Burns", "managerId": 12}, 
    { "id": 2, "firstName": "Bart", "lastName": "Simpson", "managerId": 1}, 
    { "id": 3, "firstName": "Marge", "lastName": "Simpson", "managerId": 1}, 
    { "id": 4, "firstName": "Lisa", "lastName": "Simpson", "managerId": 1}, 
    { "id": 5, "firstName": "Maggie", "lastName": "Simpson", "managerId": 1}, 
    { "id": 6, "firstName": "Homer", "lastName": "Simpson", "managerId": 4}, 
    { "id": 7, "firstName": "Ned", "lastName": "Flanders", "managerId": 4}, 
    { "id": 8, "firstName": "Krusty", "lastName": "The Clown", "managerId": 2}, 
    { "id": 9, "firstName": "Waylon", "lastName": "Smithers", "managerId": 2}, 
    { "id": 10, "firstName": "Ralph", "lastName": "Wiggum", "managerId": 5}, 
    { "id": 11, "firstName": "Itchy", "lastName": "", "managerId": 5}, 
    { "id": 12, "firstName": "Comic Book Guy", "lastName": "", "managerId": 4} 
] 

managerIdフィールドは自己idフィールドへの外部キーを参照しています。

idフィールドから計算された "managerName"フィールドに、firstNameとlastNameを連結した列を追加するクエリを作成する必要があります。

以下は、私が試した(簡略化した)クエリです。私はこのWHERE managerId = idが見える場所で実現

SELECT * , 
(SELECT CONCAT_WS(' ', firstName, lastName) FROM employee WHERE managerId = id) as managerName 
FROM employee WHERE employee.id = ?; 

が、私は正直に正しい値に一致するように配置するためにどのような条件を知らない:疑問符(nodejs中)mysql driverで埋めプレースホルダです。

誰でも手助けできますか?

EDIT 誰かが同じことをするとつまずくケースでは、私がhelpful articleを見つけました。例も似ています。

答えて

2

LEFT JOINはあなたの友人です。 tra:次のようなクエリを使用する:

SELECT 
    e.*, 
    CONCAT_WS(' ', m.firstName, m.lastName) AS managerName 
FROM employee e WHERE e.employee.id = ? 
LEFT JOIN employee m ON e.managerId = m.id; 
+0

'e'と 'm'では、2つの異なるテーブルを参照していますか?これはすべて1つのテーブルにあります。 – Ketus

+0

@Ketus - はい私は同じテーブルに参加しましたが、私は "m"を忘れてしまいました。もう一度やり直してください –

+0

返信いただきありがとうございます。私はエラーが表示されませんが、Sql Workbenchは "LEFT JOIN employee m ON e.managerId = m.id"の近くに文法エラーを返すようにこの構文を初めて使用しています – Ketus

関連する問題