有没有办法将变量条件放在SQL的连接中?

时间:2017-03-07 21:57:28

标签: mysql sql

我的问题是:我需要将两个表连接在一起,保留一个表中的所有数据。这将是一对多的比赛。我需要在一对多匹配中设置标准。例如:

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

我知道我希望在这两个名字上加上外部联接,但由于缺乏更好的词汇方式,因此不知道如何使用“本地标准”。这是可能的,它是如何完成的?

2 个答案:

答案 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;