【问题标题】:Oracle Select Query based on Column valueOracle 根据列值选择查询
【发布时间】:2015-11-25 06:25:24
【问题描述】:

我有两张桌子可以说

Table A 

id , name address

Table B 

id , age, import_date

Table B idTable A. 的引用键

现在我想从 A & B but 返回结果,如果记录不在 B 中,我仍然想查看记录,所以为此我使用左外连接

Select * from A a left join B b
on a.id = b.id

现在即使我在 B 中没有记录,我仍然可以得到记录。

表 B 可能包含重复的 ID,但 import_date 是唯一的。

现在我想要的结果是,如果表 B 中有重复的 id,那么我只想获取 import_date 到今天为止的记录。

我仍然想获取不存在的 id 的记录,但如果表 B 中有 ID,那么我想应用上述条件。

我希望有人可以帮助我。

样本数据

Table A

01|John|London
02|Matt|Glasgow
03|Rodger|Paris

Table B

02|22|31-AUG-2015
02|21|30-AUG-2015
02|23|29-AUG-2015

查询将返回

01|John|London|null|null|null
02|Matt|Glasgow|22|31-Aug-2015
03|Rodger|Paris|null|null

【问题讨论】:

  • Select * from A a left join B b on a.id = b.id
  • @Tarun 我已经有这个查询了。我有一个错字,我已经修正了。
  • 发布一些示例数据和所需的输出。
  • 这是 MySQL 还是 Oracle?
  • @Crazy2crack 它的甲骨文

标签: mysql sql oracle select duplicates


【解决方案1】:

您几乎得到了解决方案。只需再添加一个条件,如下所示

Select a.id,a.name,a.address,b.age,b.import_date 
       from tablea a left join tableb b 
            on a.id=b.id and b.import_date=trunc(sysdate)
            order by a.id;---This line optional

查看DEMO HERE

【讨论】:

  • 如果我正确理解了您的查询,即使将更新日期(如 01-SEP-2015)的某些行添加到表中,您的查询也会显示日期为 31-AUG-2015 的行.我说的对吗?
  • b.import_date = CURDATE() - 此编辑将仅选择当前日期
  • 谢谢大家。我没有注意到这个要求。但是Curdate() 在 MYSQL 中。 Oracle 等价于 sysdate。更新了答案
【解决方案2】:
SELECT * 
FROM Table_A t1 LEFT OUTER JOIN Table_B t2 ON t1.id=t2.id UNION
SELECT * 
FROM Table_A t1 LEFT OUTER JOIN Table_B t2 ON t1.id=t2.id
GROUP BY t2.import_date
HAVING t2.import_date=CURDATE();

【讨论】:

  • 您能否编辑您的答案以添加一些解释,说明它的作用以及为什么它可以解决问题?
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多