2013-07-12 45 views
0

我正在構建一個應用程序來管理借用給工作人員的工具,並且表的設置方式是有一個工具表,它具有唯一的工具代碼和序列號碼和包含唯一工具代碼和返回日期的貸款表。每次有貸款時,都會創建一個新條目,貸款創建時的返回日期爲空。SQL在另一個表中選擇所有沒有值

我現在的查詢基於文本輸入搜索所有工具。我已經嘗試了很多帶有內部連接的代碼,但沒有成功,因爲我對SQL沒有太多經驗,所以我無法弄清楚如何使其工作。

SELECT [Tools].[ToolID], [Tools].[Type], [Tools].[Brand], [Tools].[Serial], [Tools].[Year], [Tools].[Code] FROM [Tools] 
WHERE ([Tools].Serial LIKE '%234%' OR [Tools].Code LIKE '%234%') 

我在貸款數據庫中搜索工具時出現我的問題。我想讓它顯示在工具表格工具:

A)已在貸款數據庫中沒有條目(即一種新的工具)

B)數據庫中的所有條目都返回日期(工具已退回)

謝謝。

編輯:兩者相結合的答案

SELECT [Tools].[ToolID], [Tools].[Type], [Tools].[Brand], [Tools].[Serial], [Tools].[Year], [Tools].[Code] 
FROM [Tools] left outer join 
Loan ON [Tools].code = Loan.toolcode 
WHERE Loan.toolcode is null AND ([Tools].Code LIKE '%234%' OR [Tools].Serial LIKE '%234%') 

UNION 

SELECT [Tools].[ToolID], [Tools].[Type], [Tools].[Brand], [Tools].[Serial], [Tools].[Year], [Tools].[Code] 
FROM Loan 
INNER JOIN Tools ON Tools.Code = Loan.ToolCode 
GROUP BY [Tools].[ToolID], [Tools].[Type], [Tools].[Brand], [Tools].[Serial], [Tools].[Year], [Tools].[Code] 
HAVING count(returndate) = count(*) 
+0

我可能那會說一些愚蠢的,但每個工具,在貸款表格中選擇其等價物,並做了'計數()'...? – Ariane

+0

我在加入時遇到了麻煩,每當我進行加入時,它都不會顯示沒有價值的工具(我對SQL的經驗不足)。 Gordon Linoff的回答是我正在尋找的。 – Phalanx

回答

1

爲了表明在貸款數據庫中沒有輸入工具查詢:

SELECT t.* 
from tools t left outer join 
    loans l 
    on t.code = l.toolcode WHERE l.toolcode is null; 

我認爲第二個問題,你想要所有條目都有返回日期的所有工具 - 即沒有條目是NULL

select l.toolcode 
from loans l 
group by l.toolcode 
having sum(case when returndate is null then 1 else 0 end) = 0 

此公式計算returndatenull的記錄數,只返回沒有此類記錄的工具。編寫相同的邏輯的另一種方法是:

having count(returndate) = count(*) 
+0

謝謝=]正是我需要的。 所以IS NULL在沒有條目時有效? 對不起,我不能給你答覆upvote,因爲我沒有聲譽。 – Phalanx

+0

我會提供upvote。 – Ariane

相關問題