Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 两个表之间的SQL匹配和列之间的进一步匹配_Mysql_Sql_Ms Access - Fatal编程技术网

Mysql 两个表之间的SQL匹配和列之间的进一步匹配

Mysql 两个表之间的SQL匹配和列之间的进一步匹配,mysql,sql,ms-access,Mysql,Sql,Ms Access,我有两个表:主数据和样本数据 主数据有“键”、“起始日期”、“截止日期”、“PayTM”列 示例数据有“键”、“创建日期”、“付款”列 我正在尝试获取执行此操作的代码: 对于两个表之间的每个“键”匹配> 确定“创建日期”是否介于“开始日期”和“截止日期”之间> 如果是,则显示匹配/记录(来自样本数据表),包括PayTM和PayTS。 如果没有,不要显示记录。(并通过执行步骤2和3完成所有匹配) 这是我到目前为止所拥有的,但它显示的记录不匹配…我尝试用EXISTS替换WHERE NOT EXIST

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

主数据有“键”、“起始日期”、“截止日期”、“PayTM”列

示例数据有“键”、“创建日期”、“付款”列

我正在尝试获取执行此操作的代码:

  • 对于两个表之间的每个“键”匹配>

  • 确定“创建日期”是否介于“开始日期”和“截止日期”之间>

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

  • 这是我到目前为止所拥有的,但它显示的记录不匹配…我尝试用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
                 );
    

    您的问题可以通过简单的连接来解决。比如:

    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];
    

    注意:上面的查询是伪查询,只是为了突出重点

    我想这应该可以解决

    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'
    

    当我尝试应用此解决方案时,它会为“键”和日期之间的匹配提取所有数据记录。我只需要它从样本数据中提取那些匹配的记录,但也只需要从主数据中包含“PayTM”。我是通过说SELECT cd.*,md.[PayTM]来实现这一点的吗?另外,如果我想添加一个包含该查询的列,它将查看“PayTS”和“PayTM”,如果这两个匹配,它会说“yes”,如果它们不匹配,它会说“No”…使用sql是否可以做到这一点?@KateLO您可以简单地使用
    md.PayTM
    is select part而不是
    md.*
    。如果您可以共享确切的查询,那么我可以修改它。我不认为OP中显示的查询是编写的,因为它引用了md中的
    [创建日期]
    ,这是不正确的。我刚刚测试了您提供的代码,它可以工作,我现在唯一想弄清楚的是,我如何让代码为每个记录添加一个新的列值,比较PayTM和PayTS,如果它们匹配,我会说“是”如果不是“否”。那一定是代码的外接程序还是完全不同的东西?@KateLO您可以在选择部分使用CASE语句。它类似于'SELECT cd.*,在md.PayTM=cd.PayTS的情况下,则'Yes'或'No'作为SameValue从[Sample Data]作为cd结束,[Master Data]作为md,其中cd.Key=md.Key和cd.[Creation Date]介于md.[FROM Date]和md.[To Date];'阅读有关连接的信息