SQL: Select 在特定列中具有特定值的帐户的所有行

SQL: Select all rows of the accounts which have certain value in a particular column

我在 table1 中有一些数据,格式如下:

ID1     ID2     Col3   Col4 ...
x1      a1       a  
x1      a1       b  
x1      a2       c  
x2      a1       a
x2      a2       b
x2      a2       c
x3      a3       a
x3      a3       d   
x4      a3       d

我想显示在 Col3 字段中具有 'a' 的帐户 (ID1+ID2) 的所有行。 所以输出应该看起来像

ID1     ID2     Col3   Col4 ...
x1      a1       a  
x1      a1       b    
x2      a1       a
x3      a3       a
x3      a3       d

这是我正在使用的查询:

SELECT * 
FROM t1 table1
WHERE EXISTS
(
   SELECT t2.ID1, t2.ID2
   FROM t2 table1
   where t1.ID1 = t2.ID1
   AND t1.ID2 = t2.ID2
   AND t2.Col3 = 'a'
)

这个查询花费了很多时间。有没有更快的方法?

谢谢!!


我找到了一个解决方案: 我正在处理的 table 有数百万行。因此查询花费了很多时间。我能够通过在 table 上执行主键索引来提高速度。

谢谢!! :)

你能更好地解释一下你想要什么吗?因为你的示例结果不像你说的那样(只有 'a' 在 col3 中)并且你的查询是多余的我认为查询和这将产生相同的结果:

SELECT * FROM t1 table1

您将获得所有结果

SELECT * FROM table1 WHERE col3 = 'a'

先试试这个:

SELECT DISTINCT a.*
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND   a.id2 = b.id2 
AND   (a.col3 = 'a' or b.col3 = 'a')

如果不想要,请尝试以下原始操作:

SELECT *
FROM table1 AS a
JOIN table1 AS b
WHERE a.id1 = b.id1
AND   a.id2 = b.id2 
AND   (a.col3 = 'a' or b.col3 = 'a')

我认为这可能是解决方案

SELECT * 
FROM t1
WHERE ID1 IN (SELECT ID1 FROM t1 WHERE Col3 LIKE 'a')

解决方案 1

Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 在 col3
[ 中包含正确的数据=22=] SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a";

解决方案 2

Select 来自第 1 列和来自第 2 列的匹配行但前提是 table 1 和 table 2 包含 col3[=26= 中的正确数据]

SELECT ID1, ID2, Col3 FROM table1 LEFT JOIN table2 ON Table1.col3 = "a" AND Table2.col3 = a;