【问题标题】:SQL Select All Without Values in Another TableSQL 在另一个表中选择所有没有值
【发布时间】:2013-07-12 01:52:50
【问题描述】:

我正在构建一个应用程序来管理借给员工的工具,并且该表的设置方式是有一个具有唯一工具代码和序列号的工具表和一个包含唯一的工具代码和返回日期。每次有贷款时,都会创建一个新的条目,贷款创建时的返回日期为空。

我目前的查询基于文本输入搜索所有工具。我已经尝试了很多内部连接的代码,但都没有成功,而且由于我对 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(*)

【问题讨论】:

  • 我可能会说些傻话,但是对于每个工具,在贷款表中选择它的等价物,然后做一个count()...?
  • 我在加入时遇到了麻烦,每当我加入时,它都不会显示没有价值的工具(原因是我对 SQL 缺乏经验)。 Gordon Linoff 的答案正是我想要的。

标签: c# sql wpf


【解决方案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(*)

【讨论】:

  • 谢谢 =] 正是我需要的。那么 IS NULL 在没有条目时有效吗?抱歉,由于我没有声望,所以我不能给你点赞。
猜你喜欢
  • 2017-11-13
  • 2014-12-16
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2021-01-26
相关资源
最近更新 更多