Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-如何在数据位于同一个表中的SQL中为特定参数找到不同的值_Sql_Database - Fatal编程技术网

SQL-如何在数据位于同一个表中的SQL中为特定参数找到不同的值

SQL-如何在数据位于同一个表中的SQL中为特定参数找到不同的值,sql,database,Sql,Database,我不确定用SQL查询实现这一点最简单的方法是什么 如何找到列test=1中的唯一值,但该值不在测试2或测试3的任何其他值中。也就是说,如果在测试1和测试3中都有狗B,它就不会出现在我的结果中。我只希望结果显示在test=1中,但它们对于test=1是唯一的,并且不会在其他任何地方重复 使用下面的示例,我的最终结果应该是Dog A,因为所有其他值至少还会显示一次。也就是说,我不能只在Dog列上做一个唯一的测试,因为在测试4中z和y是唯一的 我在考虑两个临时表,然后进行连接,但是否有一个简单的方法只

我不确定用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

我想这可能行。我想这可能行。所有数据都在一个表中。我知道所有数据都在一个表中,我只使用一个表并将其连接到自己。所有数据都在一个表中。我知道所有数据都在一个表中,我只使用一个表并将其连接到自己。