我知道我的标题不是很具描述性......让我在这里详细解释。
假设一个表有26个字段。例如field_a ... field_z。我只想要一个选择查询只返回15个字段。
所以,通常,我会做SELECT field_a,field_b ... field_o FROM myTable。
这很繁琐。在MYSQL中是否有一种方法可以做SELECT *并告诉它不要返回某些字段?
e.g。如SELECT * exclude(field_p,field_q .. field_z)FROM myTable?
谢谢大家的答案。 :)
答案 0 :(得分:4)
你永远不应该在生产代码中使用它。
您应该始终指定要返回的列,如下所示:
SELECT `column1`, `column2`, `someothercolumn`
FROM `myTable`
与往常一样,the documentation可以帮助实现细节!
答案 1 :(得分:3)
SQL本身不支持您要求的功能。 (如果确实如此,它会遇到与select *
相同的问题。请参阅其他评论)
这是我在使用MySQL时所做的事情:
describe my_table
总而言之,无论列数如何,创建选择列表大约需要20-30秒。这样可以确保我不会拼错或遗忘任何列。
答案 2 :(得分:2)
delimiter //
DROP PROCEDURE IF EXISTS `getColumnNames`//
CREATE PROCEDURE `getColumnNames` (db_name CHAR(255), t_name CHAR(255), ex_name CHAR(255))
BEGIN
SELECT group_concat(column_name) FROM `information_schema`.`COLUMNS` C
WHERE
table_schema = db_name
AND
table_name = t_name
AND
column_name not in (ex_name)
GROUP BY table_schema,table_name;
END
//
delimiter ;
call getColumnNames("Db_name", "tbl_name", "col_to_exclude");
答案 3 :(得分:1)
不使用您想要的字段(即使您想要所有字段,也请选择* shouold不会出现在生产代码中)。我不知道mySQL,但在SQL Server中我可以拖放列,这使得它易于指定,有没有办法通过拖放来减少这种繁琐?
答案 4 :(得分:1)
没有办法做到这一点,因为无论如何,'SELECT *'在生产环境中是一个坏主意。想想如果存在这样的事情就需要做的所有额外错误捕获 - 如果表中不存在排除字段会怎么样?这会造成错误吗?警告?
列举所有字段确实很乏味,但这是正确的方法。它使您的代码(更多一点)自我记录,并有助于在周期的早期停止错误。例如,如果'user_name'由于某种原因最终被重命名为'username',那么SQL语句将失败,并且您的代码中没有奇怪的数据等待跟踪。
答案 5 :(得分:0)
我希望没有办法做到这一点。即使有一个,我建议不要使用它。
种类的解决方案是创建一个排除您想要排除的行的视图,并且可以从视图中选择*。