基于列值

时间:2015-08-31 09:01:34

标签: mysql sql oracle select duplicates

我有两张桌子可以说

Table A 

id , name address

Table B 

id , age, import_date

Table B idTable A.

的参考密钥

现在我想从A & B b ut返回结果如果记录不在B中我仍然想看到记录所以我使用左外连接

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

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

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

现在我想要的结果是,如果表B中存在重复的ID,那么我只想获取我今天mport_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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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();