数据库查询问题 获取不存在的数据

qq_37449334 2017-02-05 10:19:32
table A
id name
1 a
2 c
3 d
select * from A where name in ('a','b','c')
明显 查询结果没有b 但我想要的结果
返回 b
就是查询一堆的数据返回不存在的
...全文
389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
0与1之间 2017-02-06
  • 打赏
  • 举报
回复
引用 13 楼 qq_37449334 的回复:
[quote=引用 12 楼 Merry0101 的回复:] 可以先填充一份完整数据临时表,关联现有表查出空值的就可以了
填充表A left jion A1原表? 还有一个问题 update 100 条数据 返回更新了90条 我想获取没有更新的10条怎么搞[/quote] 你更新的条件是什么,如果你按更新的条件可以查询到100条数据,而Update后只有90条受影响的话你可以根据原有条件再查询一次,剩下的10条数据就可以出来了 出现这样的情况有可能是你的数据存在重复
道素 2017-02-06
  • 打赏
  • 举报
回复
按照我的理解,你想要的和正常的查询思路相反 正常是以表的数据为主,你这里是以你这堆数据为主。 关键的是你这些数据是以什么数据格式得到的呢?('a','b','c' 怎么来的) 正常的思路 将这些数据放在一个表里,然后类似这样(我随表手写的)

 select * from (values('a'),('b'),('c')) s(name)
where not exists(select 0 from TableA as a where  a.Name=s.[name])
 
zbdzjx 2017-02-05
  • 打赏
  • 举报
回复
with B as
(
select 'a' name union all
select 'b' name union all
select 'c' name
)
select * from B left join A on B.name=A.name
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
[quote=引用 6 楼 qq_37449334 的回复:] 什么意思不理解。。 上万条数据你这里不是写死了‘b’吗?
where name in ('a','b','c') 这个 in 后面,有好几万个 值吗?[/quote]好几千~~
卖水果的net 版主 2017-02-05
  • 打赏
  • 举报
回复
引用 6 楼 qq_37449334 的回复:
什么意思不理解。。 上万条数据你这里不是写死了‘b’吗?
where name in ('a','b','c') 这个 in 后面,有好几万个 值吗?
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:
[quote=引用 4 楼 qq_37449334 的回复:] [quote=引用 3 楼 wmxcn2000 的回复:] with m as ( select 'b' c ) select * from m where not exists(select * from t where m.c = t.id)
数据不止这么少~~~[/quote] 有多少,你就写多少。[/quote] 什么意思不理解。。 上万条数据你这里不是写死了‘b’吗?
卖水果的net 版主 2017-02-05
  • 打赏
  • 举报
回复
引用 4 楼 qq_37449334 的回复:
[quote=引用 3 楼 wmxcn2000 的回复:] with m as ( select 'b' c ) select * from m where not exists(select * from t where m.c = t.id)
数据不止这么少~~~[/quote] 有多少,你就写多少。
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
with m as ( select 'b' c ) select * from m where not exists(select * from t where m.c = t.id)
数据不止这么少~~~
卖水果的net 版主 2017-02-05
  • 打赏
  • 举报
回复
with m as ( select 'b' c ) select * from m where not exists(select * from t where m.c = t.id)
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
where 是对数据的过滤,如果表中都没有,结果中肯定也没有;
哪我想要把不存在的b 怎么返回出来~~
卖水果的net 版主 2017-02-05
  • 打赏
  • 举报
回复
where 是对数据的过滤,如果表中都没有,结果中肯定也没有;
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 12 楼 Merry0101 的回复:
可以先填充一份完整数据临时表,关联现有表查出空值的就可以了
填充表A left jion A1原表? 还有一个问题 update 100 条数据 返回更新了90条 我想获取没有更新的10条怎么搞
0与1之间 2017-02-05
  • 打赏
  • 举报
回复
可以先填充一份完整数据临时表,关联现有表查出空值的就可以了
二月十六 版主 2017-02-05
  • 打赏
  • 举报
回复
先写了一个splite方法:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_splitstr](@SourceSql NVARCHAR(MAX),@StrSeprate VARCHAR(100))
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @ch AS VARCHAR(100)
SET @SourceSql=@SourceSql+@StrSeprate
WHILE(@SourceSql<>'')
BEGIN
SET @ch=LEFT(@SourceSql,CHARINDEX(@StrSeprate,@SourceSql,1)-1)
INSERT @temp VALUES(@ch)
SET @SourceSql=STUFF(@SourceSql,1,CHARINDEX(@StrSeprate,@SourceSql,1),'')
END
RETURN
END


然后再操作数据:
declare @s varchar(100),@sql varchar(1000)
set @s='a,b,c,d,e,f';
;WITH A(id,name)AS(
select 1,'a' union all
select 2,'c' union all
select 3,'d'
)
SELECT F1
FROM dbo.f_splitstr(@s, ',')
WHERE F1 NOT IN ( SELECT name
FROM A )


结果:







Andy-W 2017-02-05
  • 打赏
  • 举报
回复
这个像是查询断号的例子,name字段a,b,c需要一定的规律性。 可以参考:

use test
go

--> --> (Andy)生成測試數據
 
if not object_ID('Tempdb..#') is null
	drop table #
Go
Create table #(id nvarchar(2),name nvarchar(4))
Insert #
select '1','a' union all
select '2','c' union all
select '3','d'
Go
Select char(ascii(b.name)-1) as name
	from # as a
		inner join # as b on b.name=char(ascii(a.name)-1)

/*
name
-----------------------
b
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧