加入3个表而不会丢失引用每个表的能力

时间:2016-07-27 10:43:45

标签: sqlite left-join

我有3个带有这个模拟数据的表

Item *id, name*
1, coke
2, fanta 
3, juice

Branch *id, name*
1, store
2, warehouse
3, shop

BranchItem *item_id, branch_id, qty*
1, 1, 100
1, 2, 30
2, 2, 10

我想查询一个项目(例如可乐)并在所有分支中获取其数量(即使它不存在的那些, qty 列应该为NULL)

所以结果看起来应该是

1, coke, store, 100

1, coke, warehouse, 30

1, coke, shop, NULL

我有一个可以执行此操作的查询,但由于别名表,我无法引用结果表的列。结果的解析是在ORM对象中完成的,该对象最好不应该被重写

我的查询

Select * from item left join (select * from branch left join ( select * from branchitem where item_id = 1) branchitem on branch.id = branchitem.branch_id) JOINEDNAME on true where item.id = 1;

我的问题是我不想让Elias加入分支和早午餐项目,因为我失去了在ORM中单独引用它们的能力。如何重写此查询以使表保留其名称?

1 个答案:

答案 0 :(得分:1)

您不需要使用子查询:

SELECT Item.id,
       Item.name,
       Branch.name,
       BranchItem.qty
FROM Item
CROSS JOIN Branch
LEFT JOIN BranchItem ON Item.id = BranchItem.item_id
                    AND Branch.id = BranchItem.branch_id
WHERE Item.id = 1;  -- or put it into the branch join