我需要通过两个条件从表中选择数据
我有四张桌子
交易
已支付 | |
---|---|
123 | 是 |
456 | 是 |
789 | 无 |
这里的问题是您的子查询与主查询不相关,它不引用任何外部查询表。如果您自己运行它,您会注意到它返回2行。
select i.amount
from tranid t
inner join info i on t.tranid = i.tranid
and t.payed = 'yes'
and i.contractname = 'finance'
此外,当您在查询中多次引用同一个表时,最好为每个表使用不同的别名,这样您就可以将它们区分开来。
这里有一个相对较小的更改,应该可以让您的查询工作:
select t.tranid,
(select i2.amount
from info i2
where i2.tranid = i.tranid
and i2.contractname = 'finance') as "Amount",
c.currencyname as "Account currency"
from tran t
inner join info i on t.tranid = i.tranid
inner join account a on i.accountid = a.accountid
inner join currency c on a.currencyid= c.currencyid
and t.payed = 'yes'
and i.contractname = 'card'
尽管如果是我,我根本不会使用子查询——我只会加入info
表两次。
select t.tranid,
i2.amount as "Amount",
c.currencyname as "Account currency"
from tran t
inner join info i on t.tranid = i.tranid
and i.contractname = 'card'
inner join info i2 on t.tranid = i2.tranid
and i2.contractname = 'finance'
inner join account a on i.accountid = a.accountid
inner join currency c on a.currencyid= c.currencyid
and t.payed = 'yes'
我真的不理解info
表中的currency
列,它似乎与currency
表不匹配。但我想这与这个问题无关。