当前位置: 首页 > 面试题库 >

使用同一表上的选择更新行

景鹏飞
2023-03-14
问题内容

我正在尝试使用相同的表查询更新行。语境:

ID        |  LANG       |  TEXT
----------------------------------
1         |  EN         |  Hello
1         |  FR         |
1         |  ES         |
2         |  EN         |  Boat
2         |  FR         |  Bateau
2         |  ES         |

我想:对于每一行;如果 TEXT为NULL ; 使用具有相同ID且LANG =’EN’的行的TEXT值更新它。

做这样的事情的SQL请求是什么?


问题答案:

您没有指定数据库。以下是标准SQL:

UPDATE t
    SET TEXT = (SELECT text
                FROM t t2
                WHERE t.id = t2.id AND LANG ='EN' AND
                      TEXT IS NOT NULL
               ) 
    WHERE TEXT IS NULL;

如果出现重复,则应执行以下操作:

UPDATE t
    SET TEXT = (SELECT max(text)
                FROM t t2
                WHERE t.id = t2.id AND LANG ='EN' AND
                      TEXT IS NOT NULL
               ) 
    WHERE TEXT IS NULL;

编辑:

当然,并非所有数据库都支持所有ANSI标准功能。在MySQL中,您可以join改用:

UPDATE t JOIN
       (SELECT id, max(text) as text_en
        FROM t t2
        WHERE LANG ='EN' AND TEXT IS NOT NULL
       ) ten 
       ON t.id = ten.id
    SET t.TEXT = ten.text_en
    WHERE t.TEXT IS NULL;


 类似资料:
  • 问题内容: 我正在尝试使用同一表中不同行(和不同列)中的值更新表中的行。尽管我的语法没有任何结果,但与此类似:这是代码(已更新): 问题答案: 或者,简单地

  • 问题内容: 显然,以下是不正确的。 我得到的价值: SQL查询: MySQL说: 1093-您无法在FROM子句中指定目标表’aTable’用于更新 因此,我试图制作一个位图表,每一行对应一个位,并具有一个“ map”值。 要插入表中,我不想执行两个查询,而是想执行一个查询。我应该怎么做? 没有人对此发表评论,但是由于我正在尝试制作位图,因此应该是* 2而不是^ 2,是我的错误,请注意,这就是为什

  • 问题内容: 我有一张桌子,看起来像这样 我正在寻找一种方法,以使用“ VALUE”列中其他行中具有相同“ NAME”的数据更新值“ Test2”和“ Test”(此处ID并非唯一,ID的复合键和NAME成为唯一的一行)。例如,我正在寻找的输出是: 如果在另一个表中,我会没事的,但是我对于如何使用相同的NAME值引用当前表中的另一行感到困惑。 更新资料 修改完manji查询后,下面是我用于有效解决方

  • 问题内容: 目前,我正在尝试向我们在Salesforce内部使用的自定义选择列表中添加值。目前,经过数天的尝试,我无法创建新的自定义选择列表,如下所示: 现在,我尝试使用xml更新现有选择列表中的值。但是,当我尝试用更新标记替换create标记时,它告诉我在该位置无效的标记如“ fullName”,“ label”等。 任何帮助将非常感激! 问题答案: 经过数天的尝试,我终于找到了一种更新Sale

  • 问题内容: 我要实现以下目标: 表的当前状态(my_table) (my_table2)的查询结果 表的预期状态(my_table) 可以在一个更新查询中完成吗?我正在RHEL 5.0上寻找Sybase ASE 12.5 编辑: 我找不到Sybase的解决方案,但该问题的当前答案适用于MS SQL Server。 问题答案: 更新 在MS SQL Server中,您将执行此操作。OP指出这在Syb

  • 问题内容: 在同一张表上更新后,如何在触发器中更新表的列? 这是触发条件: 现在当我像这样更新表时 这不起作用,因为我得到以下信息: 那么我到底该如何工作呢? 问题答案: 如果将触发器更改为而不是,可以这样操作: