获取满足所有条件的记录

qwerty

我有2张桌子

表格1

A | B | C | D | E | F
a   1   2   1  4   001
b   4   3   1  4   001
c   1   1   1  4   001
b   1   3   1  4   001
d   1   2   1  4   001
a   1   2   1  4   002
b   4   3   1  4   002
b   1   1   1  4   002

表2

A | B | C | D | E
a   1   2   1  4
b   4   3   1  4
c   1   1   1  4
d   1   2   1  4

输出:

F    |  D  
001    1

因此,列A,B,C,D,E和F都是其中特定条件的列。表1是具有需要与表2中的数据进行比较的数据的表。如果除FTable1和Table2中的记录以外的其他不同列中的所有记录,则应在输出中仅选择那些记录。

编辑:

仅显示F列中的001,因为它具有所有4行,并且在相同的列中具有相同的值,如表2所示。在F列中的值002的记录未选择,因为它们没有表2中的所有行。我试过了-

select count(A) over(Partition by A,B,C,D,E,F) as rw,* 
into #temp1 
from Table1

select sum(rw) as sm, F 
from #temp1 group by F

select F 
from #temp
where sm = (select count(A) from Table2)

此逻辑的问题之一是002可以具有2-3个重复的行,这可能导致计数等于table2中的行计数。

10762409说恢复莫妮卡

一些在SQL Fiddle中运行的示例创建代码:

create table t1 (
    A varchar(1),
    B int,
    C int,
    D int,
    E int, 
    F int);
create table t2 (
    A varchar(1),
    B int,
    C int,
    D int,
    E int);
insert into t1 VALUES 
    ('a', 1, 2, 1, 4, 1),
    ('b', 4, 3, 1, 4, 1),
    ('c', 1, 1, 1, 4, 1),
    ('b', 1, 3, 1, 4, 1),
    ('d', 1, 2, 1, 4, 1),
    ('a', 1, 2, 1, 4, 2),
    ('b', 4, 3, 1, 4, 2),
    ('b', 1, 1, 1, 4, 2);
insert into t2 VALUES 
    ('a',1,2,1,4), ('b',4,3,1,4), ('c',1,1,1,4), ('d',1,2,1,4);

将两个表连接在一起,仅选择列A和F,并使用一个不同的子句删除重复项:

SELECT DISTINCT t1.A, t1.F
FROM t1 
    LEFT JOIN t2 ON t2.A = t1.A
WHERE t1.B = t2.B
    AND t1.C = t2.C
    AND t1.D = t2.D
    AND t1.E = t2.E;

计算每个F的总行数:

SELECT count(DISTINCT t1.A) AS countNum, t1.F
FROM t1 
    LEFT JOIN t2 ON t2.A = t1.A
WHERE t1.B = t2.B
    AND t1.C = t2.C
    AND t1.D = t2.D
    AND t1.E = t2.E
GROUP BY t1.F

使用Haveing子句仅过滤出与所有a,b,c,d匹配的匹配项:

SELECT t1.F
FROM t1 
    LEFT JOIN t2 ON t2.A = t1.A
WHERE t1.B = t2.B
    AND t1.C = t2.C
    AND t1.D = t2.D
    AND t1.E = t2.E
GROUP BY t1.F
HAVING count(DISTINCT t1.A) = 4

如果您事先不知道有多少个不同的约束,则可以将t4中的约束数量计数替换为“ 4”:

SELECT t1.F
FROM t1 
    LEFT JOIN t2 ON t2.A = t1.A
WHERE t1.B = t2.B
    AND t1.C = t2.C
    AND t1.D = t2.D
    AND t1.E = t2.E
GROUP BY t1.F
HAVING count(DISTINCT t1.A) = 
    (SELECT COUNT(DISTINCT A) FROM t2)

(我相信也可以将其放入CTE。)

那里的最后一个块仅选择F列,但我不知道您是否可以明确选择其他任何列,因为例如,如果t1中存在行('d',1,1,1,4,001),该怎么办?应该显示什么?

根据您的需要,您可以将最后一个块放入子查询中,以用于WHERE F IN (above query)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rails查询记录必须满足所有条件

如果满足所有条件,则SQL获取行

获取满足所有条件的所有子实体

如何在javascript中提交一组必须满足所有条件的记录

sql中所有条件都满足时如何选择记录

遍历多个条件,直到满足所有条件

SQL - 返回满足所有条件的值

满足所有条件后如何运行功能

满足数组中所有条件的查询

获取带有条件的关联记录数

PowerApps:获取有条件的最新记录

Laravel:有条件地获取记录

MySQL多个where条件,结果不满足所有条件

Rails多个if语句列出了输出文本上满足的所有条件

多对一关系,仅选择祖先满足所有条件的行

创建一列以标识是否满足所有条件

MYSQL:当满足子查询的所有条件时,UPDATE查询中的SET值

GitLab-CI:仅在满足所有条件时运行作业

尽管未满足所有条件,Sails js findOne()返回结果

仅在R中满足所有条件时才如何过滤行

使用Javascript,如何检查用户输入是否满足所有条件,然后显示输出?

表格使用preg_match进行验证,如果满足所有条件,则发送邮件

当满足所有条件时,检查多个s3事件以触发lambda吗?

即使似乎满足所有条件,JIT编译器也不会内联方法

Vue 3 Composition API - 在满足所有条件之前禁用表单提交按钮

如何从一个表中获取所有记录,并且仅从具有条件的联接表中获取记录

删除有条件的记录

有条件的记录分组

Postgres查询,如果满足条件,则有条件地从记录子集中返回一个值