标签: except

解决 NOT IN NULL 问题的最佳方法?

有很多解释为什么 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),然后对该表进行连接删除。

有没有更好的办法?

null stored-procedures sybase except

3
推荐指数
1
解决办法
5645
查看次数

COUNT 设置 DIFFERENCE 和 UNION

我似乎无法找到答案的相当简单的问题 - 我正在处理工会和差异,我想对结果执行 COUNT。目前,我不得不输出到一个文件并“wc -l”该文件(Postgres 打印减去 4)。必须有一种方法来包含 COUNT ...

SELECT tbl1.id EXCEPT (SELECT tbl2.id UNION tbl3.id); 
Run Code Online (Sandbox Code Playgroud)

我想知道设置差异后的结果数量。感谢您提供任何意见!

postgresql except

2
推荐指数
2
解决办法
3163
查看次数

选择与多对多关系的一侧无关的值

我有一个类别和值之间的连接表,指示哪些类别与每个值相关联。我想找到与每个类别无关的值。

类别:

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 方法。所以任何建议将不胜感激。

sql-server except

2
推荐指数
1
解决办法
189
查看次数

如何使用 SSMS 将数据库 1 表 1 与数据库 2 表 1 进行比较?

我有两个数据库 - 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)

sql-server ssms except

2
推荐指数
1
解决办法
2万
查看次数

两个表的区别

我试图找出两个表之间的差异,每个表都在不同的数据库中。我以为我可以做一个完整的外连接,但我得到的结果太多了。

下面的 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)

sql-server t-sql except

2
推荐指数
1
解决办法
2957
查看次数

WITH ... AS 语句未按预期工作

我收到此错误:

WITH...AS 语法错误

当我尝试执行以下查询时出现:

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)

任何指导我错误所在的帮助将不胜感激!

postgresql cte except

2
推荐指数
1
解决办法
632
查看次数

如何比较暂存表和操作表之间的数据?

我只是想问如何比较两个数据库表,暂存表与操作表。

在我们进行转换并将其转换为正确的数据类型后,例如将flag列 (Y/N)转换nvarcharbit或到int,如何比较两个表之间的数据?

sql-server etl except

1
推荐指数
1
解决办法
2789
查看次数

Postgres 9.1 中的 ACID 违规?

我正在使用 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 自动重新启动它们?

postgresql concurrency postgresql-9.1 acid except

1
推荐指数
1
解决办法
703
查看次数

如何使用except但从except运算符比较-psql中排除列?

我想比较两组列,但从比较中排除一列,因为它永远不会出现在第二个表中,我的结果需要它。所以,解释:

两个表的列:

  • ID (独特的价值,所以我不想比较)
  • amount
  • email
  • date

我想要实现的目标:从表 1 中获取在amountemail和上具有完全相同值的所有事务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)

我怎样才能做到这一点?

postgresql except

1
推荐指数
1
解决办法
2763
查看次数

在 SQLite 3 中的 WITH RECURSIVE 之前使用 EXCEPT

有没有办法做到这一点?我正在尝试做这样的事情:

SELECT x
FROM table
EXCEPT
WITH RECURSIVE ...();
Run Code Online (Sandbox Code Playgroud)

sqlite except

0
推荐指数
1
解决办法
541
查看次数