SQL在另一个表中不带值地全选
本文关键字:全选 另一个 SQL | 更新日期: 2023-09-27 18:21:59
我正在构建一个应用程序来管理借给员工的工具,该表的设置方式是有一个具有唯一工具代码和序列号的tools表和一个包含唯一工具代码的Loans表。每次有贷款时,它都会创建一个新的条目,创建贷款时的返回日期为空。
我现在的查询基于文本输入搜索所有工具。我尝试了很多使用内部联接的代码,但都没有成功,而且由于我对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(*)
显示贷款数据库中没有条目的工具:
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
此公式计算returndate
为null
的记录数,并且只返回没有此类记录的工具。编写相同逻辑的另一种方法是:
having count(returndate) = count(*)