Oracle Select 根据列值查询
Oracle Select Query based on Column value
我有两个 table 假设
Table A
列 id , name address
Table B
列 id , age, import_date
Table B id
是Table A.
的参考键
现在我想 return 来自 A & B b
ut 的结果,如果记录不在 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
我有两个 table 假设
Table A
列 id , name address
Table B
列 id , age, import_date
Table B id
是Table A.
现在我想 return 来自 A & B b
ut 的结果,如果记录不在 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