有很多解释为什么 NOT IN NULL 不起作用,但我没有看到任何解决方案。(最近的问题在这里:为什么 NOT IN 包含 NULL 的集合总是返回 FALSE/NULL?)
我有 6 个存储过程的可选参数,用于过滤查询的某个值。以前的开发人员做了这样的事情:
IF @var1 IS NULL AND .....
select ...
else
select ...
where value in (@var1, ...)
Run Code Online (Sandbox Code Playgroud)
我不是特别喜欢这个。(查询非常庞大),所以我决定选择这样的东西:(
无论如何,我们在临时表中得到了结果)
IF @var IS NOT NULL OR ...
delete from #temp where value not in (@var1,...)
Run Code Online (Sandbox Code Playgroud)
但我意识到这行不通。
我唯一能想到的就是创建另一个临时表,该表将只保存@var1 等中的非空值(使用 if 语句或删除 where 为 NULL),然后对该表进行连接删除。
有没有更好的办法?
我似乎无法找到答案的相当简单的问题 - 我正在处理工会和差异,我想对结果执行 COUNT。目前,我不得不输出到一个文件并“wc -l”该文件(Postgres 打印减去 4)。必须有一种方法来包含 COUNT ...
SELECT tbl1.id EXCEPT (SELECT tbl2.id UNION tbl3.id);
Run Code Online (Sandbox Code Playgroud)
我想知道设置差异后的结果数量。感谢您提供任何意见!
我有一个类别和值之间的连接表,指示哪些类别与每个值相关联。我想找到与每个类别无关的值。
类别:
ID CategoryName
-- ------------
1 category1
2 category2
3 category3
Run Code Online (Sandbox Code Playgroud)
类别值:
CategoryID ValueID
---------- -------
1 1
1 2
2 1
3 2
Run Code Online (Sandbox Code Playgroud)
价值:
ID ValueName
-- ---------
1 value1
2 value2
3 value3
Run Code Online (Sandbox Code Playgroud)
我想要的查询输出如下:
CategoryID ValueID ValueName
---------- ------- ---------
1 3 value3
2 2 value2
2 3 value3
3 1 value1
3 3 value3
Run Code Online (Sandbox Code Playgroud)
我很困惑如何将其作为查询来处理。“连接”表似乎阻止了通常的 LEFT JOIN WHERE null 方法。所以任何建议将不胜感激。
我有两个数据库 - Database1 和 Database2。
两个数据库都包含一个结构相似的表,示例如下:
================================================== ========================================== | 身份证 | 姓名 | 电话无格式 | 拨打国家/地区代码 | 国际拨号代码 | 互联网顶级域名 | ================================================== ========================================== | | | | | | | ================================================== ==========================================
但是,由于某种原因,(a) 一个数据库中的一个表的数据与 (b) 另一个数据库中的另一个表中包含的数据不完全相同。
所以,我怎么可以比较Database1.Table1反对Database2.Table1?
我尝试使用以下查询,但什么也没发生,所以想知道是否必须重写它:
SELECT MIN(TableName) as TableName,
ID,
Name,
PhoneNoFormat,
DialingCountryCode,
InternationalDialingCode,
InternetTLD
FROM
(
SELECT 'Table A' as TableName,
A.ID,
A.Name,
A.PhoneNoFormat,
A.DialingCountryCode,
A.InternationalDialingCode,
A.InternetTLD
FROM [D:\DATABASE1.MDF].[dbo].[Table1] AS A
UNION ALL
SELECT 'Table B' as TableName,
B.ID, B.Name,
B.PhoneNoFormat,
B.DialingCountryCode, …Run Code Online (Sandbox Code Playgroud) 我试图找出两个表之间的差异,每个表都在不同的数据库中。我以为我可以做一个完整的外连接,但我得到的结果太多了。
下面的 T-SQL 返回 167 个结果
SELECT N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], description [Full] FROM [db1].[dbo].[tb1] where delete_date is null
except
SELECT ObjectGUID [GUID], GivenName [First], sn [Last], displayName [Full] FROM [db2].[dbo].[tb1]
Run Code Online (Sandbox Code Playgroud)
当我将其反转为以下时,它返回 214 个结果
SELECT ObjectGUID [GUID], GivenName [First], sn [Last], displayName [Full] FROM [db2].[dbo].[tb1]
except
SELECT N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], description [Full] FROM [db1].[dbo].[tb1] where delete_date is null
Run Code Online (Sandbox Code Playgroud)
但是,我需要的不仅仅是数据库中的那些列,因此我无法使用该except语句。
select N'{'+ADobjectGUID+N'}' [GUID], first_name [First], last_name [Last], db1.dbo.tb1.description [Full], domain_user_id, sAMAccountName, employeeID
from db1.dbo.tb1 …Run Code Online (Sandbox Code Playgroud) 我收到此错误:
当我尝试执行以下查询时出现:
with expensive_service as (
select s1.*
from service s1, service s2
where s1.price > s2.price
)
select *
from service except expensive_service;
Run Code Online (Sandbox Code Playgroud)
我试图实现WITH ... AS(链接到 PostgreSQL 文档)。
此查询为我提供了所需的输出:
select *
from service except (
select s1.*
from service s1, service s2
where s1.price > s2.price
)
Run Code Online (Sandbox Code Playgroud)
任何指导我错误所在的帮助将不胜感激!
我只是想问如何比较两个数据库表,暂存表与操作表。
在我们进行转换并将其转换为正确的数据类型后,例如将flag列 (Y/N)转换nvarchar为bit或到int,如何比较两个表之间的数据?
我正在使用 Postgres DB 为大量计算机/进程实现作业调度。简而言之,每个作业都有其 id,所有调度都通过三个选项卡实现:所有作业、当前正在运行的作业和已完成的作业。
调度的关键功能是 (1) 请求作业和 (2) 通知 DB 已完成的作业。请求作业从作业列表中获取任何 id,它不在运行表中,也不在已完成表中:
insert into piper.jobs_running
select x.fid from (
SELECT fid FROM piper.jobs
except
select fid from piper.jobs_running
except
select fid from piper.jobs_completed
) as x limit 1
returning(fid)
Run Code Online (Sandbox Code Playgroud)
完成作业会将其从运行列表中删除,并将其插入到已完成列表中。因为它不是特定于并发的,所以我省略了 SQL 命令(完成一项工作需要几十分钟到几个小时。)
对我来说,这是一个令人讨厌的惊喜,上面运行完全相同的查询的两个进程(几乎同时请求作业)可能会获得相同的作业 ID (fid)。我要提出的唯一可能的解释是 Postgres 不依赖 ACID 一致性。注释?
附加信息:我将事务设置为可序列化(在postgresql.conf 中 set default_transaction_isolation = 'serializable')。现在,如果隔离未完全填充,DBMS 会使事务失败。是否可以强制 Postgres 自动重新启动它们?
我想比较两组列,但从比较中排除一列,因为它永远不会出现在第二个表中,我的结果需要它。所以,解释:
两个表的列:
ID (独特的价值,所以我不想比较)amountemaildate我想要实现的目标:从表 1 中获取在amount、email和上具有完全相同值的所有事务date。我也希望ID在最终结果集中,但如果我使用except子句进行比较,我的查询将有 0 个结果。
代码:
Select /*ignoreAtComparison*/ t1.ID, t1.amount, t1.email, t1.date from t1
except
Select /*ignoreAtComparison*/ t2.ID, t2.amount, t2.email, t2.date from t2 ;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
有没有办法做到这一点?我正在尝试做这样的事情:
SELECT x
FROM table
EXCEPT
WITH RECURSIVE ...();
Run Code Online (Sandbox Code Playgroud) except ×10
postgresql ×4
sql-server ×4
acid ×1
concurrency ×1
cte ×1
etl ×1
null ×1
sqlite ×1
ssms ×1
sybase ×1
t-sql ×1