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