我正在尝试使用select语句来获取某个MySQL表中的所有列,除了一个.有一个简单的方法吗?
编辑:此表中有53列(不是我的设计)
实际上有一种方法,你需要有权利这样做...
SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), ',', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ' ' AND TABLE_SCHEMA = '
'), ' FROM '); PREPARE stmt1 FROM @sql; EXECUTE stmt1;
更换
,
and
警告:INFORMATION_SCHEMA查询的性能相当差,所以要小心这种类型的查询不在任何关键路径中.
就像@Jan Koritak在下面所说的那样,如果您要删除的标题列也是您希望保留的任何列的标题的子字符串,则此答案实际上不起作用.[这里有一个更好的答案,可以在这里找到](http://stackoverflow.com/questions/2365972/how-can-i-select-from-a-table-in-mysql-but-省略-某些柱/ 13808457#13808457).
这比仅指定已知最佳实践的列更糟糕.
如果要忽略的列是表结构中列出的最后一列(因为替换将与尾随昏迷不匹配),这也将不起作用.
如果列名称中有空格,则此方法无效.它应该更新为始终用反引号""中的名称括起来
2> 小智..:在mysql定义(手册)中没有这样的东西.但是如果你有很多列
col1
,......col100
,则以下内容可能很有用:mysql> CREATE TEMPORARY TABLE temp_tb SELECT * FROM orig_tb; mysql> ALTER TABLE temp_tb DROP col_x; mysql> SELECT * FROM temp_tb;
在第3步给出了错误消息:"列数与第1行的值计数不匹配".所以我将第2步更改为"UPDATE temp_tb SET id = NULL"然后它工作了.
3> Brian Childr..:在这种情况下,View会更好吗?
CREATE VIEW vwTable as SELECT col1 , col2 , col3 , col.. , col53 FROM table
哈哈!当然可以.现在,您如何构建视图以包括所有BUT中的一列.我想你看到这是如何引发原始问题的.事实上,我特意找到了这个线程,因为我想创建一个排除某些列的视图,而不必强制在视图定义中明确列出所有剩余的列.
4> Mike Stone..:你可以做:
SELECT column1, column2, column4 FROM table WHERE whatever没有得到column3,虽然你可能正在寻找更通用的解决方案?
+1来抵消downvote.虽然这是一个天真的答案,但这是完全正确的,我认为这是"一种简单的方法".
OP说有> 50列,所以这是不切实际的.
@DanielPryden,它实际上是一个比投票更高的答案更正确的答案.这不是天真的.
实际上,出于维护原因,拥有"除了"之外的所有查询都很有用.否则,如果稍后添加新字段,则必须更新显式字段列表.
大多数评分较高的答案大多只是寻找无需手动输入即可生成此确切查询的方法
5> Sean O..:如果您要排除字段的值,例如,出于安全问题/敏感信息,您可以将该列检索为null.
例如
SELECT *, NULL AS salary FROM users
SQL始终允许在结果集中使用重复的列名.如果你希望这个工作,你需要使用不支持dupes的客户端应用程序运行它*并且*优先考虑最后一个欺骗.官方命令行客户端支持欺骗.HeidiSQL也支持它们.[SQL Fiddle](http://sqlfiddle.com/#!2/f7e53/1)没有,但显示*first*dupe,而不是last.总结一下:**这不起作用**.
为什么?它不起作用.如果你有一个列工资,那么这个查询最终会得到两个名为salary的列,一个满是空,一个带有实际工资.
当然它不起作用.这是为什么你应该在mysql本身测试答案的一个很好的例子,而不是通过与mysql交谈的库.
@SeanO,@ Alastair,@ Everyone,**不覆盖.**服务器仍然返回敏感数据.
@Myforwik这个查询确实添加了第二个`salary`列.但是因为它是在*之后检索的,所以它会覆盖原始的.它不漂亮,但确实有效.
@SeanO抱歉这不起作用.
不行.返回两列,一列包含数据,另一列包含空值
6> Thomas Owens..:据我所知,没有.你可以这样做:
SELECT col1, col2, col3, col4 FROM tbl并手动选择所需的列.但是,如果你想要很多列,那么你可能只想做一个:
SELECT * FROM tbl并且忽略你不想要的东西.
在您的特定情况下,我建议:
SELECT * FROM tbl除非你只想要几列.如果您只想要四列,那么:
SELECT col3, col6, col45, col 52 FROM tbl没问题,但是如果你想要50列,那么任何使查询的代码都会变得(太?)难以阅读.
总是选择*是一个糟糕的选择.不推荐它.阅读它为什么是SQl反模式.
7> 小智..:在尝试@Mahomedalid和@Junaid的解决方案时,我发现了一个问题.所以想分享它.如果列名称具有空格或连字符(如签入),则查询将失败.简单的解决方法是在列名称周围使用反引号.修改后的查询如下
SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(CONCAT("`", COLUMN_NAME, "`")) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users'); PREPARE stmt1 FROM @SQL; EXECUTE stmt1;
8> Stacey Richa..:如果您不想选择的列中包含大量数据,并且由于速度问题而您不想包含它,并且您经常选择其他列,我建议您创建一个新表使用您通常不会使用原始表的键选择的一个字段,并从原始表中删除该字段.在实际需要额外字段时加入表.
9> jammycakes..:您可以使用DESCRIBE my_table并使用其结果动态生成SELECT语句.
10> cwd..:我的主要问题是我在连接表时得到的很多列.虽然这不是您的问题的答案(如何从一个表中选择除了某些列之外的所有列),但我认为值得一提的是,您可以指定从特定表中获取所有列,而不是仅指定.
table.
以下是一个如何非常有用的示例:
select users.*, phone.meta_value as phone, zipcode.meta_value as zipcode from users left join user_meta as phone on ( (users.user_id = phone.user_id) AND (phone.meta_key = 'phone') ) left join user_meta as zipcode on ( (users.user_id = zipcode.user_id) AND (zipcode.meta_key = 'zipcode') )结果是users表中的所有列,以及从元表连接的另外两列.
谢谢,我需要选择第一个表的所有列,加入第二个表中只有一个字段,你的回答对我有帮助.
11> Junaid..:我喜欢这个回答,
@Mahomedalid
除了这个事实,评论来自@Bill Karwin
.提出的可能问题@Jan Koritak
是真的,我遇到了这个,但我找到了一个技巧,只是想在这里分享面对这个问题的任何人.我们可以用Prepared语句的子查询中的where子句替换REPLACE函数,如下所示:
使用我的表和列名称
SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users'); PREPARE stmt1 FROM @SQL; EXECUTE stmt1;因此,这将仅排除字段,
id
但不排除company_id
希望这能帮助任何寻求解决方案的人.
问候
推荐阅读
如何解决《将2个集合转换为Map》经验,为你挑选了1个好方法。 ... [详细] 如何解决《GooglePlacesAPIFramework文件夹iOS中缺少某些类》经验,为你挑选了0个好方法。 ... [详细] 如何解决《WHERE语句在使用It.IsAny的单元测试中不起作用》经验,为你挑选了1个好方法。 ... [详细] 如何解决《我可以快捷方式检查变量是否为"nil"并替换为默认值?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《jQuery:分离还是不分离?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何使用THREE.DecalGeometry为贴花设置正确的方向》经验,为你挑选了0个好方法。 ... [详细] 如何解决《我可以在流链中访问先前lambda的值吗?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《jQuery选择了滚动问题,包含所选内容的元素不滚动》经验,为你挑选了1个好方法。 ... [详细] 如何解决《弹簧启动时MultipartFile的最大限制》经验,为你挑选了3个好方法。 ... [详细] 如何解决《如何在gcloud中省略用户交互》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用mysql中的altertable将date转换为datetime或timestamp》经验,为你挑选了1个好方法。 ... [详细] 如何解决《WordPress-允许对作者页面发表评论》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何在Dev环境中提高Webpack性能?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《psycopg2选择timestamp返回包含在元组中的datetime.datetime,如何解压缩?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《为什么不可能/不太可能显示性能改进?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《连接列表列表》经验,为你挑选了1个好方法。 ... [详细] 如何解决《读取不同语言环境中的时间戳》经验,为你挑选了0个好方法。 ... [详细] 如何解决《我们可以在SQLTransaction中多次使用'GO'吗?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在kubernetes上传递一个认为yaml的配置文件来创建新的复制控制器》经验,为你挑选了1个好方法。 ... [详细] 如何解决《xgboost中Objective和feval之间的差异》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1视差效果跳跃
- 2如何锁定一行以便select只返回一次行?
- 3访问jquery.each中的元素id属性值
- 4如何在foreach循环中创建HTML表
- 5sscanf函数中的%* s是什么意思
- 6重用LINQ查询
- 7如何重命名AWS API Gateway API实例?
- 8在DLL中使用IXMLDocument需要CoInitialize?
- 9在提交应用之前启用bitcode vs include bitcode
- 10在光标位置的可编辑div内插入多个元素
- 11改变argv后的C分段错误
- 12当调用函数中的下一行是return语句时,使用SaveChangesAsync()有什么好处?
- 13即使我在调用fetchall之前执行,MySQLdb也会引发"execute()first"错误
- 14如何使用`gsub`替换具有相同字符串的多个子字符串
- 15Visual Studio for ASP.NET 5项目是否需要.sln文件?它可以只使用Global.json吗?
- 16在Python中有效地分割数据
- 17kubernetes本地集群创建pod有'ErrImagePull'和'ImagePullBackOff'之类的错误
- 18按组计算摘要并将值返回到数据框中
- 19从Swift中的NSBundle获取文件路径
- 20我没有在sdk中获取'com.google.android.gms:play-services-wallet:8.4.0'更新Google Play服务
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有