我有3个不同的事务表,看起来非常相似,但有一点点差异.这是因为有3种不同的交易类型; 取决于列更改的事务类型,因此要在3NF中获取它们,我需要将它们放在单独的表中(对吗?).
例如:
t1:日期,用户,金额
t2:日期,用户,谁,金额
t3:日期,用户,内容,金额
现在我需要一个查询,它将为每个表中的同一个用户提供所有事务,例如
select*from t1,t2,t3,其中user ='me'; (这当然不起作用).
我正在研究JOIN语句,但没有正确的方法来做到这一点.谢谢.
编辑:其实我需要每个表中的所有列,而不仅仅是那些相同的列.
编辑#2:是的,当然,拥有transaction_type并不会破坏3NF - 所以也许我的设计完全错了.这是真正发生的事情(它是一种替代货币系统):
- 交易在用户之间,如相互信用.因此,单位在用户之间交换.
- Inventarizations是带入系统的物理内容; 用户获得此单位.
- 消耗是消耗的物质; 用户必须为此付费.
|--------------------------------------------------------------------------| | type | transactions | inventarizations | consumations | |--------------------------------------------------------------------------| | columns | date | date | date | | | creditor(FK user) | creditor(FK user) | | | | debitor(FK user) | | debitor(FK user) | | | service(FK service)| | | | | | asset(FK asset) | asset(FK asset) | | | amount | amount | amount | | | | | price | |--------------------------------------------------------------------------|
(请注意,'金额'是不同的单位;这些是条目,并对这些金额进行计算.在范围之外解释原因,但这些是字段).
所以问题改为"可以/应该在一个表中还是多个表(我现在已经有了)?" 我需要先前描述的SQL语句来显示运行余额.
(现在这应该成为一个新问题,还是可以编辑?).
编辑#3:由于编辑#2实际上将此转换为新问题,我还决定发布一个新问题.(我希望这没问题?)
您可以在没有数据的列的select语句中为默认值提供默认值;
所以
SELECT Date, User, Amount, 'NotApplicable' as Who, 'NotApplicable' as What from t1 where user = 'me'
UNION
SELECT Date, User, Amount, Who, 'NotApplicable' from t2 where user = 'me'
UNION
SELECT Date, User, Amount, 'NotApplicable', What from t3 where user = 'me'
Run Code Online (Sandbox Code Playgroud)
假设谁和什么是字符串类型列.您也可以使用Null,但需要某种占位符.
我认为将您的附加信息放在一个单独的表中并将所有事务保存在一个表中对您来说会更好,除非我错过了其他一些细节.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |