2013-02-21 94 views
1

本學期我在線學習數據庫設計課程,這是我第一次使用SQL。我畢業於通信專業,但我正在參加一些計算機科學課程來幫助自己。我們正在使用Microsoft SQL Server 2008,而且我很厭煩我們的練習的最後一個問題。前6個是輕而易舉的(基本選擇功能,排序結果,使用別名重命名錶等),但最後一個處理空值。編寫一條SELECT語句來確定無效值?

它指出:

編寫決定了發票表的PAYMENTDATE 柱是否有無效值的SELECT語句。 如果有餘額,PaymentDate必須爲空值,如果沒有餘額,則必須爲非空值 。在 中測試這些條件的WHERE子句中的複合條件。

甚至不知道從哪裏開始。哈哈。我通常在課堂教學中學習得更好,但是我的課程安排並不適合這門課,所以任何解釋都會有幫助!任何幫助表示讚賞!

戴夫D.


那麼,哪一個是正確的?當有兩個不同的答案時,很難將其分解:)在我休息的日子裏,我要去教授的辦公室,以便她親自向我解釋任何大聲笑

+0

您如何開始向我們展示桌子的樣子,然後給它一個鏡頭。請更新您的答案。 – Kermit 2013-02-21 22:18:01

+0

我可能會讓這個很困難,但我不確定你的意思:(我們使用的是SQL Server Management Studio,並且所有的數據庫/表都已經連接了,這些列包括InvoiceID,VendorID,InvoiceNumber,InvoiceDate ,InvoiceTotal,PaymentTotal,CreditTotal,TermsID,InvoiceDueDate和PaymentDueDate .InvoiceID是主鍵,根據設計,PaymentDate是唯一允許空值的列。 – 2013-02-21 22:24:05

+0

「如果存在Balance Due」意思是「IS NOT NULL」或「 > 0「? – 2013-02-21 22:29:30

回答

1

下面的代碼將選擇無效的記錄PAYMENTDATE

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

如果出現這種情況,我就是想讓它過度哈哈,當你剛接觸這個時候,這一切似乎都很複雜,只需要退後一步,突然讀出它的要求 – 2013-02-21 22:26:29

+1

表達式'<> null '在SQL中總是評估爲false。這個答案不正確。 – 2013-02-21 22:31:44

+1

你不能與NULL進行比較,並期望獲得有意義的結果。您需要使用** IS NULL **或** IS NOT NULL **。 – 2013-02-21 22:33:04

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值的任何其他的比較(=,<>,<,< =,>,> =,或在)返回NULL布爾值,它們被解釋爲FALSE。

祝你好運學習SQL。

+0

請確保如果答案錯誤仍然存​​在,請降低票數。 – 2013-02-21 22:28:50

+0

@NickVaccaro。 。 。我很不情願下臺。然而,我會評論。 – 2013-02-21 22:31:19

+0

這個「where」語句選擇PaymentDate有效的結果,所以它做相反的事情 – tchrikch 2013-02-21 22:37:45