科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道教你快速掌握如何在 SQL中解决松散关系

教你快速掌握如何在 SQL中解决松散关系

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果你在某些特殊商业问题上有一点创造性思维的话,你就会经常在SQL中设计解决方案。例如,公司为了使索要的费用和支付的费用一致,他们可以在本文两个方法中间选择一个。

作者:赛迪网 changelive 来源:天新网 2008年3月26日

关键字: 数据库 SQL Server Mssql SQL

  • 评论
  • 分享微博
  • 分享邮件

因为支付的数目可能多,也可能少,还可能与索要的数目一样,为了将支付与索要进行匹配,我必须在某个范围内上下查找索要的数目。你可以使用BETWEEN语句,但是我在这里使用了Abs()函数。这个函数可以更清楚的表达我们感兴趣的值的范围。

DECLARE @proximity int 
SET @proximity = 2 -- change this value to suit your situation 
SELECT 
Loose.Charges.PK AS Charge#, 
Loose.Charges.Amount AS Charge, 

Loose.Payments.PK AS Payment#, 
Loose.Payments.Amount AS Payment 
FROM 
Loose.Charges INNER JOIN Loose.Payments 
ON ABS(Loose.Charges.Amount - Loose.Payments.Amount)<= @proximity 

GO

在你运行代码之前,你可以先预测一下结果,然后再运行代码,看看你预测的是否正确。

它的结果如下所示:

Charge# Charge Payment# Payment 
1 100.00 1 99.00 
2 12.005 12.00 6 998.00 
6 1000.00

虽然这个解决方法是正确的,但是它的应用范围并不是很广泛。这个例子正确的定义了三种情况:低于支付、正确的支付、多于支付。然而,这个方法除去了所有不能与支付匹配的索要,同时工作人员可能对各种情况都感兴趣。我能通过改变连接来得到不同的结果(参考Listing A)。下面就是这个过程的运行结果:

Charge#ChargePayment#Payment 
1100.00199.00 
212.00512.00 356.00NULLNULL 
443.00NULLNULL 
559.00NULLNULL 
6998.0061000.00

现在,工作人员就知道有三个索要与支付不匹配了。

如果对于同一个产品,顾客进行了两次错误的支付,且支付的数目一样的话,你应该如何得到这个信息呢?举个例子来说,你可以在Payments表中增加一条数目为00的记录,这时候Payments表中就有两条相同的记录了,然后再重新运行一下最后的查询代码。下面就是它的结果集:

Charge#ChargePayment#Payment 
1100.00199.00 
212.00512.00 
356.00NULLNULL 
443.00NULLNULL 559.00NULLNULL 
6998.0061000.00 
6998.0071000.00

这个结果集显示了一个解决隐藏问题的方法。我可以从这个结果中看出索要数目为6的记录被支付了两次。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章