mysql - SQL 查询语法

标签 mysql sql database

编辑:

我有一张表:比如说 TABLE1,这是数据:

--------------------------
COL1 | COL2 | COL3 | COL4
--------------------------
 1   |  10  | 100  | 1000
 1   |  10  | 100  | 1000
 1   |  10  | 100  | 1000
--------------------------

然后说 TABLE2,

---------------------------
ID | COL_NAMES
---------------------------
1  | COL3
2  | COL4
---------------------------

现在我要做的是从表 2 中选择列名,对于这个列名,将表 1 中的所有值设置为 0, 这应该是最终结果:

--------------------------
COL1 | COL2 | COL3 | COL4
--------------------------
 1   |  10  |   0  |    0
 1   |  10  |   0  |    0
 1   |  10  |   0  |    0
--------------------------

如何编写查询?

最佳答案

如果你想在 Table1SELECT,你可以这样做:

SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME),',',
(SELECT GROUP_CONCAT(0,' as ',t2.COL_NAMES) FROM table2 t2),' FROM table1;')
INTO @query
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'table1'
AND c.COLUMN_NAME not in (select COL_NAMES from table2)
ORDER BY c.ORDINAL_POSITION;

PREPARE stmt FROM @query;
EXECUTE stmt;

SELECT Query

如果你想更新 table1,你可以使用这个查询来更新它:

SELECT CONCAT('UPDATE TABLE1 SET ', GROUP_CONCAT(c.COLUMN_NAME, ' = ', 0) )
INTO @query
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'table1'
AND c.COLUMN_NAME in (select COL_NAMES from table2)
ORDER BY c.ORDINAL_POSITION;

PREPARE stmt FROM @query;
EXECUTE stmt;

UPDATE Query

关于mysql - SQL 查询语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22420024/

相关文章:

mysql - 如何在SQL中有效地统计某些列值的出现次数?

asp.net - 通过 Plesk 上传现有数据库

database - 如何使用wordpress数据库到laravel?有什么办法吗?

java - 防止每次读取时发生 DataNucleus 事务

java - 在有效用户的情况下执行错误的循环

php - MySQL 选择具有两个 where 条件且计数大于 1 且具有相同列 ID 的行

c# - 如何针对列的 md5 进行 EntityFramework 查询

mysql - SQL-单个字段上的多项选择

sql - 基于值存在的表条件连接

mysql - 选择指定年份的新商品或返回商品