【问题标题】:How can you replace a value via a LEFT JOIN in SQL?如何通过 SQL 中的 LEFT JOIN 替换值?
【发布时间】:2013-11-22 07:06:05
【问题描述】:

我有一个包含一组翻译的表,我想查询插入翻译的原始表(如果存在翻译)。例如:

创建表 foo (
  标识文本,
  关键文本
);

CREATE TABLE 翻译(
  关键文本,
  价值文本
);

插入 foo(id, key) VALUES('1', '1');
插入 foo(id, key) VALUES('2', '2');
插入 foo(id, key) VALUES('3', '5');
插入 foo(id, key) VALUES('4', '6');

INSERT INTO translations(key, value) VALUES('5', '7');
INSERT INTO translations(key, value) VALUES('6', '8');

我想要一个查询来返回表格:

1 1 2 2 3 7 4 8

SQLfiddle:http://sqlfiddle.com/#!7/ee8cc

谢谢!

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    像这样?

    SELECT f.id, f.key, COALESCE(t.value, f.key) AS TranslatedKey
    FROM foo f
    LEFT JOIN translations t
    ON f.key = t.key
    

    如果没有找到匹配项,来自t 的值将是左连接。 COALESCE 返回输入列表中的第一个非空值。

    【讨论】:

    • @PittsburghDBA 你一定错过了我的编辑。这已经解决了。
    【解决方案2】:

    另一种方式,用例:

    SELECT f.id,
    CASE WHEN t.key IS NULL THEN f.key ELSE t.value END AS Column2
    FROM foo f
    LEFT JOIN translations t ON f.key=t.key
    

    在我看来,合并方式更整洁。

    【讨论】:

      【解决方案3】:
      select a.*,b.value  from foo a left join translations b on a.key = b.key
      

      希望对你有帮助..

      【讨论】:

      • 您实际上并没有替换该值,只是添加了另一列
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多