我有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中单独引用它们的能力。如何重写此查询以使表保留其名称?
答案 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