我试图使用一个选择语句从某个MySQL表中获得除一个以外的所有列。有什么简单的方法吗?

编辑:在这个表格中有53列(不是我的设计)


当前回答

即使要查询所有列,也最好指定要查询的列。

因此,我建议您在语句中写下每一列的名称(不包括您不想要的列)。

SELECT
    col1
    , col2
    , col3
    , col..
    , col53

FROM table

其他回答

Select *是一个SQL反模式。它不应该在生产代码中使用,原因有很多,包括:

它需要更长的时间来处理。当程序运行数百万次时,这些微小的部分就会产生影响。在缓慢的数据库中,这种缓慢是由这种类型的草率编码引起的,是最难进行性能调优的类型。

这意味着你发送的数据可能比你需要的多,这会导致服务器和网络瓶颈。如果您有一个内部连接,那么发送超过所需数据的可能性是100%。

这会导致维护问题,特别是当您添加了不想到处都看到的新列时。此外,如果您有一个新列,您可能需要对接口做一些事情,以确定对该列做什么。

它可以打破视图(我知道这在SQl server中是真的,在mysql中可能是真的,也可能不是真的)。

If someone is silly enough to rebuild the tables with the columns in a differnt order (which you shouldn't do but it happens all teh time), all sorts of code can break. Espcially code for an insert for example where suddenly you are putting the city into the address_3 field becasue without specifying, the database can only go on the order of the columns. This is bad enough when the data types change but worse when the swapped columns have the same datatype becasue you can go for sometime inserting bad data that is a mess to clean up. You need to care about data integrity.

如果在插入中使用它,如果在一个表中添加了新列,而在另一个表中没有添加,那么它将中断插入。

它可能会破坏触发器。触发问题可能很难诊断。

将所有这些与添加列名所花费的时间加起来(哎呀,你甚至可能有一个允许你拖拽列名的界面(我知道我在SQL Server中这样做,我打赌有一些方法可以做到这一点,你用一些工具来编写mysql查询)。让我们看看,“我可以引起维护问题,我可以引起性能问题,我可以引起数据完整性问题,但是嘿,我节省了5分钟的开发时间。”只需要填入你想要的具体列。

我也建议你读这本书: http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers-ebook/dp/B00A376BB2/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1389896688&sr=1-1&keywords=sql+antipatterns

是的,尽管根据表的不同,I/O可能会很高,但我找到了一个解决方案。

SELECT *
INTO #temp
FROM table

ALTER TABLE #temp DROP COlUMN column_name

SELECT *
FROM #temp

起初我以为你可以使用正则表达式,但我一直在阅读MYSQL文档,似乎你不能。如果我是你,我会使用另一种语言(如PHP)来生成您想要获取的列的列表,将其存储为字符串,然后使用它来生成SQL。

虽然我同意Thomas的答案(+1;)),但我想补充一点,即我假设您不想要的列几乎不包含任何数据。如果它包含大量的文本、xml或二进制blob,那么请花时间单独选择每一列。否则你的表现就会受到影响。干杯!

如果您不想选择的列中有大量数据,并且由于速度问题而不想包括它,并且您经常选择其他列,那么我建议您使用一个通常不选择的字段创建一个新表,并从原始表中删除该字段。当实际需要额外字段时,将表连接起来。