2013-07-12 39 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

相关问题