我有一个包含以下记录的表:
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写起来并不复杂,但我已经尝试了几个小时但仍然没有得到满意的结果。有什么建议吗?
答案 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。