Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
Mysql获取行仅包含具有特定值的行_Mysql_Sql_Database - Fatal编程技术网

Mysql获取行仅包含具有特定值的行

Mysql获取行仅包含具有特定值的行,mysql,sql,database,Mysql,Sql,Database,假设“我的表”有以下行: id | prop1 | prop2 ______________________ 1 foo a 2 bar a 3 foo b 4 bar b 5 foo c 现在在本例中,我希望按prop1对行进行分组,但忽略不包含prop2=c 因此,预期结果是: 1 foo a 3 foo b 5 foo c 注意,现在示例中只有一个组,但我希望能够获得所有组。如何实

假设“我的表”有以下行:

  id | prop1 | prop2 
______________________
  1    foo      a
  2    bar      a
  3    foo      b
  4    bar      b
  5    foo      c
现在在本例中,我希望按
prop1
对行进行分组,但忽略不包含
prop2=c

因此,预期结果是:

1 foo a
3 foo b
5 foo c

注意,现在示例中只有一个组,但我希望能够获得所有组。如何实现这种方法?

下面的查询使用prop2='c'(T1)获取所有记录 并在具有相等prop1的所有记录(T2)上联接它们:

select T2.*
from    TABLE T1
join TABLE T2 ON T1.prop1=T2.prop1
WHERE T1.prop2 = 'c'
GROUP BY id

以下查询获取prop2='c'(T1)的所有记录 并在具有相等prop1的所有记录(T2)上联接它们:

select T2.*
from    TABLE T1
join TABLE T2 ON T1.prop1=T2.prop1
WHERE T1.prop2 = 'c'
GROUP BY id

您的预期结果未按
prop1
分组。如果它是按
prop1
分组的,那么在结果中只会得到一条记录

为了实现上述功能,我们可以编写一个简单的带有子查询的
SELECT
,例如:

SELECT *
FROM table
WHERE prop1 IN (
 SELECT prop1 FROM table WHERE prop2 = 'c'
);

您的预期结果未按
prop1
分组。如果它是按
prop1
分组的,那么在结果中只会得到一条记录

为了实现上述功能,我们可以编写一个简单的带有子查询的
SELECT
,例如:

SELECT *
FROM table
WHERE prop1 IN (
 SELECT prop1 FROM table WHERE prop2 = 'c'
);

如果exists子句没有prop2=c,则可以使用exists子句删除所有行

select * 
from your_table t1
where 
exists (select 1 from your_table t2 where t1.prop1 = t2.prop1
        and t2.prop2 = 'c')

解释:如果Exists caluse发现该组的c为false,它将返回true

如果exists子句没有prop2=c,则可以使用exists子句删除所有行

select * 
from your_table t1
where 
exists (select 1 from your_table t2 where t1.prop1 = t2.prop1
        and t2.prop2 = 'c')
SELECT * FROM table WHERE prop2 != "c" GROUP BY prop1
解释:如果Exists caluse发现该组的c为false,它将返回true

SELECT * FROM table WHERE prop2 != "c" GROUP BY prop1
这一行将删除带有C的att行以及prop1上的组所有其他内容


此行将删除带有C的att行以及prop1上的其他所有内容。请澄清您的答案。按
prop1
分组可以有不同的
prop2
,您想显示哪一个?请澄清您的答案。按
prop1
分组可以有不同的
prop2
,您想显示哪一个?我不是说按
分组,行是根据
prop1
@eyurdakul列出的。在这种情况下,上面的查询应该可以很好地工作是的,它可以很好地工作,但在我的情况下,我在生产环境中执行这个查询,它是一个巨大的表(而且条件不止是prop1和prop2)。我将对此进行升级投票,但这并不是解决我问题的方法。@eyurdakul我已删除了
distinct
,因此现在应该更好。此外,在
prop2
上设置索引将加快速度。。我不是说
分组,行是根据
prop1
@eyurdakul列出的。在这种情况下,上面的查询应该工作良好是的,它工作良好,但在我的例子中,我在生产上执行这个查询,它是一个巨大的表(并且有比prop1和prop2更多的条件)。我将对此进行投票,但这并不是解决我问题的方法。@eyurdakul我已删除了
distinct
,因此现在应该更好。此外,在
prop2
上设置索引将加快速度。。