2016-06-17 4 views
0

SQLite DB、Task、Project、Userの3つのテーブルが、この順番で互いに関連付けられています。私はすべてのタスクを選択したいと思います。タスクが関連付けられているプロジェクトにユーザがいる場合は、ユーザとプロジェクトの両方を見たいと思っています。SQLiteのネストされた内部結合の右側からそのような列がありません

私の最初のパスは

SELECT `Task`.`id` 
    ,`Task`.`title` 
    ,`Task`.`projectId` 
    ,`Project`.`id` AS `Project.id` 
    ,`Project`.`title` AS `Project.title` 
    ,`Project`.`userId` AS `Project.userId` 
    ,`Project.User`.`id` AS `Project.user.id` 
    ,`Project.User`.`username` AS `Project.User.username` 
FROM `Task` AS `Task` 
LEFT OUTER JOIN `Project` AS `Project` ON `Task`.`projectId` = `project`.`id` 
INNER JOIN `User` AS `Project.User` ON `Project`.`userId` = `Project.User`.`id` 
AND `Project.User`.`username` = 'test01'; 

のように見えますが、内側には、バックアップ「リップル」と私は唯一のユーザーとのプロジェクトを持っていたタスクを持って参加します。私はすべてのタスクを取得したいので、私はいくつかの括弧を追加し、

SELECT `Task`.`id` 
    ,`Task`.`title` 
    ,`Task`.`projectId` 
    ,`Project`.`id` AS `Project.id` 
    ,`Project`.`title` AS `Project.title` 
    ,`Project`.`userId` AS `Project.userId` 
    ,`Project.User`.`id` AS `Project.user.id` 
    ,`Project.User`.`username` AS `Project.User.username` 
FROM `Task` AS `Task` 
LEFT OUTER JOIN (`Project` AS `Project` 
INNER JOIN `User` AS `Project.User` ON `Project`.`userId` = `Project.User`.`id` 
    AND `Project.User`.`username` = 'test01') ON `Task`.`projectId` = `project`.`id`; 

を得た私は、SELECTからProject.User列を省略した場合、これは素晴らしい作品が、私は同様にそれらをしたいです。これを実行すると、次のエラーが発生します。

no such column: Project.User.id 

括弧を追加すると、何らかの方法でUserテーブルが非表示になっているようです。この声明から私が望むすべての行動を得る方法はありますか?

+0

そして、 'User'テーブルに' id'という列がありますか? 'Project.User'を' Project_User'のように変更して問題が解決するかどうか確認してください。もし '.'演算子が' SQL'で異なって理解されているのかどうかはわかりません。 – ishmaelMakitla

答えて

0

ishmaelMakitlaが正しいです。エイリアスの名前を変更するだけですべて動作します。

SELECT `Task`.`id` 
    ,`Task`.`title` 
    ,`Task`.`projectId` 
    ,`Project`.`id` AS `Project.id` 
    ,`Project`.`title` AS `Project.title` 
    ,`Project`.`userId` AS `Project_UserId` 
    ,`Project_User`.`id` AS `Project_User.id` 
    ,`Project_User`.`username` AS `Project_User.username` 
FROM `Task` AS `Task` 
LEFT OUTER JOIN (`Project` AS `Project` 
INNER JOIN `User` AS `Project_User` ON `Project`.`userId` = `Project_User`.`id` 
    AND `Project_User`.`username` = 'test01') ON `Task`.`projectId` = `project`.`id`; 
関連する問題