【问题标题】:UPDATE specified multiple tables with the same column nameUPDATE 指定了多个具有相同列名的表
【发布时间】:2017-01-10 22:53:27
【问题描述】:

我有多个具有匹配列名的表,并希望创建一个影响 4 个特定表中的 1 列的更新语句,如下所示:

UPDATE table1, table2, table3, table4
SET table1.column_1 = 'value', table2.column_1 = 'value', table3.column_1 = 'value', table4.column_1 = 'value'
WHERE table1.column_id = 'value' OR table2.column_id = 'value' OR table3.column_id = 'value' OR table4.column_id = 'value'

这是行不通的,我在谷歌上搜索了好几个小时才找到答案,我发现了这个https://stackoverflow.com/a/19797529/1824324

Select 'UPDATE ' + TABLE_NAME + ' SET CreatedDateTime = ''<<New Value>>'' '
From INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'CreatedDateTime'

稍作调整:

SELECT 'UPDATE ' + TABLE_NAME + ' SET column_1= ''Value'' where column_id=''value'''
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'column_1'

现在我的问题是我不希望更新具有该特定列的每个表,仅从 table1、table2、table3 和 table4 更新。如何剪切“FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'column_1'”并替换为 4 个表?

【问题讨论】:

  • 它是什么... mysql 或 sql-server?请编辑标签,只留下相关的标签。
  • 这是 SQL Server 还是 Mysql 特定的?
  • 对不起,它的mysql
  • 为什么会有多个表的列名匹配? :-(
  • @Strawberry - 除了 user_id 和其他一些东西之外,这 4 个表有不同的列

标签: mysql sql


【解决方案1】:

由于您使用的表,我相信您在谈论 MySQL。

只需过滤 TABLE_NAME 列:

SELECT 'UPDATE ' + TABLE_NAME + ' SET column_1= ''Value'' where column_id=''value'''
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'column_1'
AND TABLE_NAME IN ('table1', 'table2')

【讨论】:

  • 工作,谢谢,但是是否可以在不遍历“INFORMATION_SCHEMA.COLUMNS”中每个表中的每一列的情况下做到这一点?
  • 它将表和列过滤到您的列表中,并仅为相关的创建 SQL 语句。如果不通过表或者它的索引,真的没有办法从表中检索过滤的行。
  • @Raj More 说了算:你在过滤记录,数据库在这方面真的很厉害!
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多