编写SELECT语句以确定无效值?

时间:2013-02-21 22:16:24

标签: sql sql-server-2008

本学期我正在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信学位,但我正在参加某些计算机科学课程来帮助自己。我们正在使用Microsoft SQL Server 2008,而且我对我们练习的最后一个问题感到困惑。前6个是轻而易举的(基本选择函数,排序结果,使用别名重命名表等),但最后一个处理空值。

它声明:

  

编写一个确定PaymentDate的SELECT语句   Invoices表的列具有任何无效值。为了有效,   如果有到期余额,则PaymentDate必须为空值   如果没有到期余额,则为非空值。编码复合条件   测试这些条件的WHERE子句。

甚至不知道从哪里开始。哈哈。我通常在课堂上学得更好,但我的课程安排不允许这个课程,所以任何解释都会有所帮助!任何帮助表示赞赏!

Dave D。


哪一个是正确的?当有两个不同的答案时,很难将其分解:)在我休息的日子,我将前往教授的办公室,以便她可以亲自向我解释任何大声笑

2 个答案:

答案 0 :(得分:1)

以下代码将选择PaymentDate无效的记录

SELECT * FROM Invoices WHERE (PaymentDate is not null and BalanceDue is not null) or (PaymentDate is null and BalanceDue is null)

答案 1 :(得分:1)

因为已经发布了错误答案,我将逐步介绍。

这是一个逻辑问题,表示PaymentDateBalanceDue中的一个为空。在SQL中,使用表达式IS NULL测试NULL。

因此,此where子句如下所示:

where (PaymentDate is null and BalanceDue is not null) or -- this is the first clause
      (PaymentDate is not null and BalanceDue is null)    -- this is the second clause

与NULL值(=,<>,<,< =,>,> =或in)的任何其他比较都会返回NULL布尔值,这些值被解释为FALSE。

祝你好运学习SQL。