找到SQL左连接省略行

时间:2014-11-13 08:26:53

标签: sql left-join rows

我有两个表,一个列出事务,一个列表被取消。您如何仅显示未取消的交易并省略已取消的交易?

enter image description here

我只是想显示未被取消的交易,在这种情况下是交易 transaction_id = 1。

3 个答案:

答案 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;

然后只需清理选择列表,即可按照您希望的方式排列数据。容易。