Oracle Select 根据列值查询

Oracle Select Query based on Column value

我有两个 table 假设

Table A 

id , name address

Table B 

id , age, import_date

Table B idTable A.

的参考键

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

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

现在即使我在B没有记录我仍然有记录。

Table B 可能包含重复的 ID 但唯一 import_date.

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

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

我希望有人能帮助我。

示例数据

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

查询会return

01|John|London|null|null|null
02|Matt|Glasgow|22|31-Aug-2015
03|Rodger|Paris|null|null
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();

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

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