我在ms sql中创建了一个数据库,在数据库中我有三类人员,即员工,客户,供应商,我存储在不同的表中为每个表创建序列唯一ID。
现在这些人员ID存储在person_id和列名人员类型中,该人员类型存储了交易表中的员工,custimer或供应商,问题在于从事务表中选择记录,如此伪代码
Select t.*,s.na as staff,sp.name as supplier, c.name as customer
From Trans t
left join Staff s on s.id = t.pid
left join Suppliers sp on sp.id = t.pid
left join Customers c on c.id = t.pid
这将返回一行,而不是至少3行或更多,如何解决此问题
我的转换表
person_id Person_type Trans_id
1 staff 1
1 customer 2
2 customer 3
3 suppler 4
1 staff 5
预期输出
person_name Trans_id
james 1
mark 2
dan 3
jude 4
james 5
员工,客户和供应商存储在不同的表格中
答案 0 :(得分:1)
这就是Join的作用,将来自多个表的数据合并到一个结果行中。如果你想"保留行",而不是组合它们,你可以使用UNION
(
Select t.* From Trans t
left join Staff s on s.id = t.pid
)
UNION
(
Select t.* From Trans t
left join Suppliers sp on sp.id = t.pid
)
UNION
(
Select t.* From Trans t
left join Customers c on c.id = t.pid
)
这将为您提供您想要的多行但仍然不确定您是否正确定义了它。我看到你只是从Trans获取列,所以你没有从其他表中获取任何数据。并且您正在进行左外连接,因此其他表格不会影响选择。所以我认为它与从Trans。中选择一样。
如果您想要的是来自Trans的数据,其他表中有相应的条目,那么请执行UNION,同时将外部联接更改为内部。