mysql如何从表中选择所有列并排除一列

23 浏览
0 Comments

mysql如何从表中选择所有列并排除一列

我想使用SELECT语句从某个MySQL表中获取除一个列外的所有列。有没有简单的方法可以做到这一点?\n编辑:这个表中有53列(不是我设计的)。

0
0 Comments

在这种情况下,使用视图更好吗?

CREATE VIEW vwTable
AS  
SELECT  
    col1  
    , col2  
    , col3  
    , col..  
    , col53  
FROM table

哈哈!是的,当然。那么如何构建视图以包括除一个列之外的所有列呢?我想你可以看到这个问题如何引出了原始问题。实际上,我找到这个线程的原因就是因为我想创建一个视图,它在视图定义中排除了某些列,而不需要在视图定义中明确列出所有剩余的列。

但是使用视图只需要列出一次。

0
0 Comments

在MySQL中,当我们想要从一个表中选择所有的列,但排除其中一个列时,我们可以使用以下方法解决这个问题。

在这个问题中,我们可以看到一些尝试选择所有列并排除一个列的代码。首先,它创建了一个临时表temp_tb,并从orig_tb中选择了所有的列。然后,它使用ALTER TABLE语句删除了temp_tb中的一些列。最后,它选择了temp_tb中的所有列。

然而,这段代码在第三步中给出了一个错误消息:“列计数与行1的值计数不匹配”。为了解决这个问题,作者将第二步更改为“UPDATE temp_tb SET id = NULL”,然后代码成功运行。

此外,当再次运行这个查询时,会出现一个错误,即temp_tb已经存在。为了解决这个问题,可以在查询之前添加另一个命令“DROP TABLE IF EXISTS temp_tb;”。这样,每次运行查询时,都会首先删除temp_tb表。

此外,为了将临时表存储在内存中而不是磁盘上,并且在服务器重启后仍然存在,可以使用以下命令:CREATE TEMPORARY TABLE temp_tb ENGINE=MEMORY (SELECT * FROM orig_tb);。

总结起来,为了从一个表中选择所有的列并排除一个列,我们可以使用上述的方法。这需要创建一个临时表,并使用ALTER TABLE语句删除不需要的列。然后我们可以选择临时表中的所有列。我们还可以通过添加DROP TABLE IF EXISTS temp_tb;命令来避免重复创建表的错误,并使用CREATE TEMPORARY TABLE temp_tb ENGINE=MEMORY命令将临时表存储在内存中。

0
0 Comments

问题出现的原因是用户想要从MySQL表中选择所有列,但排除一个列。解决方法是使用以下SQL查询语句:

SET @query = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), ',', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '' AND TABLE_SCHEMA = ''), ' FROM 
'); PREPARE stmt1 FROM @query; EXECUTE stmt1;

需要注意的是,需要有相应的权限才能执行这个操作。另外,由于INFORMATION_SCHEMA查询性能较差,所以需要谨慎使用。

此解决方法不适用于需要保留的列名中包含想要删除的列名的子字符串的情况。可以在这里找到一个类似的更好的解决方法。

如果列名中包含了如id、product_id等的列名,该解决方法也不适用。正确的解决方法可以在这里找到。

虽然这种方法比直接指定列名更糟糕,但有时候需要在一个步骤中从CASE工具或框架中生成SQL,而不使用外部语言。

如果列名中有空格,这个方法也无法正常工作。应该始终在列名周围加上反引号``。

如果要忽略的列是表结构中列的最后一个,则这个方法也无法正常工作(因为替换操作无法匹配到最后的逗号)。

这个解决方法对于包含繁琐的大型XML列的数据库非常好用。

将项目与MySQL紧密绑定是否会使代码受到GPL的约束?虽然没有法律咨询师的资格,但我认为你应该使你的代码能够适用于至少两个后端,这样就没有人可以说MySQL是你源代码的一部分。

对于那些在特定情况下遇到问题的人,建议将查询语句更改为:

CONCAT ("SELECT ", (SELECT GROUP_CONCAT(column_name SEPARATOR ', ') FROM information_schema.columns WHERE table_name='' AND column_name NOT LIKE ''), ' FROM ')

0