我有两个表,一个列出事务,一个列表被取消。您如何仅显示未取消的交易并省略已取消的交易?
我只是想显示未被取消的交易,在这种情况下是交易 transaction_id = 1。
答案 0 :(得分:1)
SELECT *
FROM TRANSACTION_TABLE
WHERE transaction_id
NOT IN (
SELECT transaction_id
FROM CANCELED_TABLE);
然而,看看你的例子,我建议添加一个字段"取消"到TRANSACTION_TABLE而不是使用单独的表。
答案 1 :(得分:0)
尝试使用左外连接
select * from TRANSACTION_TABLE trtb left outer join CANCELED_TABLE cntb on trtb.transaction_id=cntb.transaction_id;
答案 2 :(得分:0)
在构建一个有点复杂的查询时,最好的方法是分阶段构建它,查看每个阶段的结果。您知道要查看尚未取消的事务,需要左外连接。好的,写下来。 (有关详细信息,请参阅 SQL Fiddle ):
select *
from Xaction x
left join Cancellations c
on c.TransID = x.ID;
现在看一下结果。这将为您提供所有事务以及Cancellation表中的详细信息(如果存在)或NULL。您要查看的行是取消数据为空的行。所以只过滤那个条件:
select *
from Xaction x
left join Cancellations c
on c.TransID = x.ID
where c.TransID is null;
然后只需清理选择列表,即可按照您希望的方式排列数据。容易。