SQL根据列过滤多个记录

时间:2011-12-21 08:04:47

标签: sql

我有一个包含以下记录的表:

Column_1  Column_2  Column_3

CA        123       EN

CA        123       SP

CA        789       EN

我的输出应该如下:

Column_1  Column_2  Column_3

CA         123       SP

CA         789       EN

我知道这个sql写起来并不复杂,但我已经尝试了几个小时但仍然没有得到满意的结果。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

为您提供结果的查询将是:

select Column_1, Column_2, Column_3
from TheTable
where
  (Column_2 = 123 and Column_3 = 'SP')
  or
  (Column_2 = 789 and Column_3 = 'EN')

答案 1 :(得分:-1)

我以为你在寻找group by

select Column_1, Column_2, Column_3 from table_name group by Column_2, Column_3

上述查询在MySQL中有效,但在评论中指出的许多其他SQL实现中都没有,我认为它不会实现你真正想要的。返回3行,而不是2行。

再次,只是猜测,但据我所知,也许这就是你要找的东西:

select Column_1, Column_2, 
  (select Column_3 from test_table t2 
   where t2.Column_1=t1.Column_1 and t2.Column_2=t1.Column_2 
   order by Column_0 desc limit 1) as Column_3
from test_table t1
group by Column_1, Column_2

这适用于MySQL,没有在任何其他测试。完全按要求返回2行。

你可以看到一个额外的Column_0 - 它应该是你表中的主[整数]键。我猜你已经拥有它了。如果没有,你需要添加它,否则你不知道哪个是你的表中插入的最后一行,以便在你有重复的Column_2时返回它。

此外,limit 1特定于MySQL。对于Firebird select top 1 ...等,MSSQL中的等效项为select first 1 ...。您没有指定正在使用的rdbms。