【问题标题】:MySQL SELECT UNION Distinct on single columnMySQL SELECT UNION 在单列上不同
【发布时间】:2015-02-23 10:04:05
【问题描述】:

我的系统中有两张表用于存储汇率。第一个 agent_rate如下。

ID  Currency Rate
=======================
3   GBP      0.65
4   EUR      0.70
5   JPY      57.4

第二张表exchange_rate如下。

ID  Currency Rate
=======================
1   USD         1
2   ZMK       200
3   GBP       0.5
4   EUR      0.75
5   JPY      60.4
6   CHF       0.9

我想选择第一个表 agent_rate 中的所有行,然后从 exchange_rate 表中添加 ID 的所有缺失值。我想在单个列上使用具有 distinct 的 union 语句,但我没有做到。我目前的解决方案如下(visual studio)

  1. agent_rate 表和填充率数据表中选择
  2. 在费率数据表中设置唯一字段,即 ID
  3. exchange_rate 表中选择并填充到临时数据表中
  4. 将记录从临时数据表移动到评分数据表并忽略错误

结果表(应该)如下:

ID  Currency Rate
=======================
1   USD         1
2   ZMK       200
3   GBP      0.65
4   EUR      0.70
5   JPY      57.4
6   CHF       0.9

在 Sql 中有没有更好的方法来做到这一点?

【问题讨论】:

标签: c# mysql sql database visual-studio-2012


【解决方案1】:

如果存在,您可以先加入表并选择代理值,否则从交换表中选择值

select coalesce(a.id, e.id) as id, 
       coalesce(a.currency, e.currency) as currency,
       coalesce(a.rate, e.rate) as rate
from exchange_rate e
left agent_rate a on a.id = e.id

coalesce 返回提供的列表中的第一个非空值。

【讨论】:

  • 但是如果存在a-row并且它的rate列是NULL,应该返回NULL还是e.rate?
  • 谁说有这样一个空列?在示例中看起来不像。如果没有必要,为什么总是让事情变得困难?
  • 对于 OP 来说,考虑表定义的后果更像是一个问题。 (就像当带有 NOT IN 子查询的应用程序突然不再工作一样,仅仅因为第一个 NULL 值在那里......)
  • 太棒了!这很有帮助!根据w3resource.com/mysql/comparision-functions-and-operators/… 。 COALESCE() 函数返回列表的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2016-06-08
相关资源
最近更新 更多