两个表之间的SQL匹配以及列

时间:2017-07-11 20:42:26

标签: mysql sql access

我有两个表:主数据和样本数据。

主数据包含“Key”,“from date”,“to date”,“PayTM”等列

示例数据包含“密钥”,“创建日期”,“付款”

我正在尝试让代码执行此操作:

  1. 对于两个表之间的每个“关键”匹配>

  2. 确定“创建日期”是否介于“从日期”到“到日期”>之间。

  3. 如果是,则显示匹配/记录(来自样本数据表),包括PayTM和PayTS。 如果没有,请不要显示记录。 (并完成执行步骤2和3的所有比赛)

  4. 这是我到目前为止,但它显示的记录不匹配...我尝试用EXISTS替换WHERE NOT EXISTS但是它给了我一个错误。我的sql编码技巧非常基础,我正在努力尝试让代码在某种程度上超越它。

    SELECT cd.*
    FROM [Sample Data] as cd
    WHERE NOT EXISTS (SELECT 1
                  FROM [Master Data] as md
                  WHERE cd.Key = md.Key AND
                        md.[Creation Date] BETWEEN md.From Date and md.To Date
                 );
    

2 个答案:

答案 0 :(得分:1)

您的问题可以通过简单的连接来解决。类似的东西:

SELECT cd.* , md.*
FROM [Sample Data] as cd, [Master Data] as md
 WHERE cd.Key = md.Key AND
                    cd.[Creation Date] BETWEEN md.[From Date] and md.[To Date];

注意:上面的查询是伪查询只是为了高亮的想法。

答案 1 :(得分:0)

我认为这应该处理它。

select
        x.key_
       ,x.paytm
       ,x.payts
from(
    select
            md.key   as key_
           ,cd.paytm as paytm
           ,cd.payts as payts
           ,case when md.creation_date between md.from_date and md.to_date
                 then 'goodie'
                 else 'baddie'
            end as the_test  

    from
            [master data] md
    inner join
            [sample data] cd
            on cd.key = md.key
)x
where
        x.the_test != 'baddie'