【问题标题】:need an oracle query joining 2 tables with 2 conditions需要一个 oracle 查询连接 2 个具有 2 个条件的表
【发布时间】:2016-01-28 21:01:40
【问题描述】:

我有一个主表

Select * from Table_Master

PKID EMPNo 名称

1101 天

2102 bbb

3 103 立方厘米

Select * from table_TXN

TXN_PKID MASTER_FKID EMP 无备注

1 1 101 不适用

2 2 500 输入错误

3 3 123 这也是一个错误的条目

我需要一个可以获取记录的查询:

2 2 500 输入错误

3 3 123 这也是一个错误的条目

类似:

select * from Table_Master a, table_TXN b where a.PKID = b.TXN_PKID BUT a.EMPNo <> b.EMPNo 

【问题讨论】:

  • 其中一张表只是临时工作表,对吧?您并没有真正存储冗余数据,是吗?如果这些表真正的表,那么只需从 table_TXN 中删除 EMPNo 就可以了。

标签: sql oracle


【解决方案1】:

我认为你的逻辑可以很好地作为一个连接:

select t.*
from table_TXN t join
     Table_Master m
     on t.txn_pkid = m.pkid and t.empno <> m.empno ;

如果您将BUT 替换为AND,您的代码示例将起作用。但是,不要使用隐式连接。显式JOINs 是二十多年前在 SQL 中引入的;显式语法更清晰、更强大,被所有数据库接受。

【讨论】:

  • 它不会给我重复的数据吗?我有大量数据将无法跟踪重复的行.. 所以只是想确定
  • 当然会给你重复的数据。每当您从多个表中select * 时,都可以保证两次获得连接列。另外,如果您选择主键字段,使用 distinct 也无济于事。
  • @DanBracuk 。 . . (1) 该查询只从一个表中选择列; (2) 一个名为 pkid 的连接似乎不太可能产生意外的重复行。
  • 不,它没有给出任何重复的数据。我得到了条件组合适当的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2018-05-22
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
相关资源
最近更新 更多