SQL-如何在数据位于同一个表中的SQL中为特定参数找到不同的值
我不确定用SQL查询实现这一点最简单的方法是什么 如何找到列test=1中的唯一值,但该值不在测试2或测试3的任何其他值中。也就是说,如果在测试1和测试3中都有狗B,它就不会出现在我的结果中。我只希望结果显示在test=1中,但它们对于test=1是唯一的,并且不会在其他任何地方重复 使用下面的示例,我的最终结果应该是Dog A,因为所有其他值至少还会显示一次。也就是说,我不能只在Dog列上做一个唯一的测试,因为在测试4中z和y是唯一的 我在考虑两个临时表,然后进行连接,但是否有一个简单的方法只从一个查询SQL-如何在数据位于同一个表中的SQL中为特定参数找到不同的值,sql,database,Sql,Database,我不确定用SQL查询实现这一点最简单的方法是什么 如何找到列test=1中的唯一值,但该值不在测试2或测试3的任何其他值中。也就是说,如果在测试1和测试3中都有狗B,它就不会出现在我的结果中。我只希望结果显示在test=1中,但它们对于test=1是唯一的,并且不会在其他任何地方重复 使用下面的示例,我的最终结果应该是Dog A,因为所有其他值至少还会显示一次。也就是说,我不能只在Dog列上做一个唯一的测试,因为在测试4中z和y是唯一的 我在考虑两个临时表,然后进行连接,但是否有一个简单的方法只
test dog
1 a
1 b
1 c
1 d
1 e
2 b
2 c
2 d
2 e
3 e
3 b
3 c
4 z
4 y
我将使用左连接:
我将使用左连接:
您可以使用条件聚合来选择只有test=1的所有值
select dog from mytable
group by dog
having count(case when test <> 1 then 1 end) = 0
您可以使用条件聚合来选择只有test=1的所有值
select dog from mytable
group by dog
having count(case when test <> 1 then 1 end) = 0
尝试使用反向参数的子查询,我使用与此处相同的数据创建了一个测试表,得到的结果仅为“a”,但运行此查询:
SELECT DISTINCT dog FROM 2col
WHERE test = 1
AND dog NOT IN
(SELECT DISTINCT dog FROM 2col WHERE test != 1);
尝试使用反向参数的子查询,我使用与此处相同的数据创建了一个测试表,得到的结果仅为“a”,但运行此查询:
SELECT DISTINCT dog FROM 2col
WHERE test = 1
AND dog NOT IN
(SELECT DISTINCT dog FROM 2col WHERE test != 1);
显示测试和狗的所有独特组合
示例:MySQL
示例:SQL Server
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
group by a.test, a.dog
having count(*) = 1
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
where a.test = 1
group by a.test, a.dog
having count(*) = 1
上述查询将导致
test dog
1 a
4 x
4 y
test dog
1 a
工作原理:与您创建两个临时表的想法相同,此SQL在DOG上连接到自身。这意味着test=1,dog=b将与test=2,dog=b和test=3,dog=c合并
但是,test=1,dog=a将只加入到自身。请注意,test=1、dog=b在与test=2和test=3连接时将出现3次。因此,我们对数据进行分组,并统计测试/狗组合出现的次数。如果它出现一次,则表示它是唯一的记录
显示测试1中唯一出现的狗
示例:MySQL
示例:SQL Server
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
group by a.test, a.dog
having count(*) = 1
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
where a.test = 1
group by a.test, a.dog
having count(*) = 1
上述查询将导致
test dog
1 a
4 x
4 y
test dog
1 a
显示测试和狗的所有独特组合
示例:MySQL
示例:SQL Server
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
group by a.test, a.dog
having count(*) = 1
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
where a.test = 1
group by a.test, a.dog
having count(*) = 1
上述查询将导致
test dog
1 a
4 x
4 y
test dog
1 a
工作原理:与您创建两个临时表的想法相同,此SQL在DOG上连接到自身。这意味着test=1,dog=b将与test=2,dog=b和test=3,dog=c合并
但是,test=1,dog=a将只加入到自身。请注意,test=1、dog=b在与test=2和test=3连接时将出现3次。因此,我们对数据进行分组,并统计测试/狗组合出现的次数。如果它出现一次,则表示它是唯一的记录
显示测试1中唯一出现的狗
示例:MySQL
示例:SQL Server
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
group by a.test, a.dog
having count(*) = 1
select
a.test, a.dog
from testing a
left join testing b on a.dog = b.dog
where a.test = 1
group by a.test, a.dog
having count(*) = 1
上述查询将导致
test dog
1 a
4 x
4 y
test dog
1 a
我想这可能行。我想这可能行。所有数据都在一个表中。我知道所有数据都在一个表中,我只使用一个表并将其连接到自己。所有数据都在一个表中。我知道所有数据都在一个表中,我只使用一个表并将其连接到自己。