Mysql SQL:选择在特定列中具有特定值的所有帐户行

Mysql SQL:选择在特定列中具有特定值的所有帐户行,mysql,sqlyog,Mysql,Sqlyog,我在表格1中有一些数据: 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 我想显示accountsID1+ID2中Col3

我在表格1中有一些数据:

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
我想显示accountsID1+ID2中Col3字段中有“a”的所有行。 所以输出应该是

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'
)
这个查询花费了很多时间。有没有更快的办法

谢谢

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


谢谢!!:

你能更好地解释你想要什么吗?因为您的示例结果看起来不像在col3中只说“a”,并且您的查询是多余的,我认为该查询和这将得到相同的结果:

SELECT * FROM t1 table1
你会带着所有的结果

SELECT * FROM table1 WHERE col3 = 'a'

你能更好地解释你想要什么吗?因为您的示例结果看起来不像在col3中只说“a”,并且您的查询是多余的,我认为该查询和这将得到相同的结果:

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 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')

我认为这可能是解决办法

选择* 从t1开始 其中ID1在中,从t1中选择ID1,其中Col3类似于“a”
我认为这可能是解决办法

选择* 从t1开始 其中ID1在中,从t1中选择ID1,其中Col3类似于“a” 解决方案1 从第1列中选择,并从第2列中选择匹配行,但仅当表1包含col3中的正确数据时 从表1左键选择ID1、ID2、Col3,并在表1上连接表2。Col3=a

解决方案2 从第1列和第2列中的匹配行中选择,但仅当表1和表2在col3中包含正确的数据时 从表1左键选择ID1、ID2、Col3,将表1.Col3=a和表2.Col3=a上的表2连接起来

解决方案1 从第1列中选择,并从第2列中选择匹配行,但仅当表1包含col3中的正确数据时 从表1左键选择ID1、ID2、Col3,并在表1上连接表2。Col3=a

解决方案2 从第1列和第2列中的匹配行中选择,但仅当表1和表2在col3中包含正确的数据时
从表1左键选择ID1、ID2、Col3,将表1.Col3=a和表2.Col3=a上的表2连接起来

如果您只想要“a”,为什么您想要的输出有“b”和“d”?我想显示id1和id2组合的所有行,其中有一行Col3=a,在表1中,x1,a1组合有一行Col3=a,因此显示组合x1,a1的所有行参见JOIN。玩得开心。如果你只想要“a”,为什么你想要的输出有“b”和“d”?我想显示id1和id2组合的所有行,其中有一行Col3=a在表1中,x1,a1组合有一行Col3=a,因此显示组合x1,a1的所有行参见JOIN。祝你玩得开心。我在我写的查询中漏掉了一行。这应该可以清除东西。欢迎使用堆栈溢出!这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时在自己的帖子上发表评论,一旦足够,你就可以在任何帖子上发表评论。如果您有一个相关但不同的问题,请参考这个问题,如果它有助于提供上下文。从表1中选择*似乎仍然相同,其中col3='a',因为t1和t2是同一个表,因此将匹配所有记录。我在编写的查询中遗漏了一行。这应该可以清除东西。欢迎使用堆栈溢出!这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时在自己的帖子上发表评论,一旦足够,你就可以在任何帖子上发表评论。如果您有一个相关但不同的问题,请参考此问题,如果它有助于提供上下文。从表1中选择*似乎仍然是一样的,其中col3='a',因为t1和t2是同一张表,所以将匹配所有记录由于你问题的模糊性,我不得不猜测你到底想知道什么,所以如果我回答不正确,请不要否决我的投票,另外,我建议研究SQL连接,因为答案肯定与SQL连接有关,因为你的问题性质模糊,我不得不猜测你到底想知道什么,所以如果我回答不正确,请不要否决我的投票,我还建议研究SQL连接,因为答案肯定与SQL连接有关