我的问题是:我需要将两个表连接在一起,保留一个表中的所有数据。这将是一对多的比赛。我需要在一对多匹配中设置标准。例如:
TableA TableB
Name Date Cat Name Date
AAA 1/1/17 Z11 AAA 1/2/17
AAA 1/4/17 Y22 AAA 1/6/17
AAA 1/7/17 X33 BBB 1/2/17
BBB 1/1/17 A44
BBB 1/3/17 B55
我需要将TableA连接到TableB,保留TableB中的所有记录,并加入Name列。我希望在TableA中加入的“本地记录”是仍然大于表B中的日期的最小日期。所以期望的结果将是:
Results
TableB.Name TableB.Date TableA.Cat
AAA 1/2/17 Y22
AAA 1/6/17 X33
BBB 1/2/17 B55
我知道我希望在这两个名字上加上外部联接,但由于缺乏更好的词汇方式,因此不知道如何使用“本地标准”。这是可能的,它是如何完成的?
答案 0 :(得分:2)
我会从tableA中创建一个子查询,以获得您想要的内容并加入其中。
子查询排除小于b.dates的a.dates。留下那些,抓住最小值。
将所有内容加入tableB
SELECT b.name ,
b.date ,
a.cat
FROM tableb b
JOIN ( SELECT a1.name ,
MIN(a1.date) AS date
FROM tableA a1
JOIN tableb b1 ON a1.name = b1.name
AND a1.date > b1.date
) a ON a.date > b.date
AND a.name = b.name;
答案 1 :(得分:1)
我会使用相关的子查询:
select b.*,
(select a.cat
from a
where a.name = b.name and a.date > b.date
order by a.date asc
limit 1
) as cat
from b;