我需要创建一个视图,我把所有的交易,我需要关联所有的操作。如果transactionoperation中没有操作,我需要输入结果。
Transaction( transaction id,transaction_name)
Operation(id_operation,operation_name);
TransactionOperatation(id_transaction,id_operation); // represents all transaction to be used
因此,观点是:
Create view title AS select
t.id_transaction as id_transaction,
t.name_transaction as name_transaction,
o.id_operation as id_operation,
o.name_operation as name_operation,
from ((TransactionOperation to
inner join transaction t on t.id_transaction=to.id_transaction)
rigth join operation o on o.id_operation=to.id_operation
问题是助理没有按我所希望的那样工作。这必须是结果,例如:
Operation id_operation operation_name
1 test
2 home
transaction id_transaction transaction_name
1 scope
2 pool
TransactionOperation id_operation operation_name id_transaction transaction name:
1 test 1 scope
1 test 2 pool
在本例中,我需要为每个事务获取所有操作。id=2的操作不会出现在transactionoperation中,但必须出现在结果中。我想要的结果是
id_operation operation_name id_transaction transaction name:
1 test 1 scope
2 home 1 scope
1 test 2 pool
2 home 2 pool
有人能帮我吗?
3条答案
按热度按时间ftf50wuq1#
你似乎只是想要一个
cross join
:不需要子查询或其他类型的查询
join
s。s6fujrry2#
我会从连接表开始加入
TransactionOperation
,然后左键连接到其他两个表:当前方法的问题是在连接表和
transaction
table。这意味着任何未连接到transaction
在他们还没来得及加入到游戏中之前,表将被删除operation
table。到处使用左连接可以解决这个问题。pvabu6sv3#
你在试图得到所有可能的组合
transaction
以及operation
,尽管没有在联接表中定义它们之间的关系。这可以通过笛卡尔积来实现(CROSS JOIN
)在两个表的唯一值之间: