我试图通过表格中的“x”位置来选择列。
深度学习
my $example = $hookup->prepare(qq{SELECT This,That,Condition,"I also want COLUMN-10" FROM tbl LIMIT ? ?});
###column_number=10 ordinal_position??
$example->execute('2','10') or die "Did not execute";
这可能吗,还是我需要对那一列运行另一个单一选择?
我遇到的一个问题是名为“Condition”的列。出于某种原因,当我尝试 select Condition
时,执行会终止。我从未尝试过,但是,如果列名是 SELECT 怎么办?
另一个注意事项是表格有 75 列宽,我只需要其中的 50 列。 Col 的名字非常冗长,所以我想按他们的“位置”来称呼他们。这也将允许将来更改列名而无需更改 select 语句。
我是新手,所以请根据我的水平解释任何答案。感谢您的帮助..
最佳答案
您几乎不应该在任何代码中依赖表中的列号(即使理论上您可以在技术上这样做)。
原因有很多,最重要的一个是有人总是可以更改表格并在开头/中间插入一列,从而完全破坏您的代码。
第二个原因是列位置 - 即使您假设表格永远不会改变 - 会导致绝对不可读,因此无法维护代码。您还记得 2 年后第 13 列是“last_name_3”吗?
请注意,如果您的问题是,例如您的代码中有类似 SELECT fn11, fn12, fn13, ... fn32
的内容,并且您觉得拼写出 fn11..fn32 是a drag,您不仅 100% 正确,而且您绝对应该通过 Perl 习语删除所说的 drag,如下所示:"SELECT "。 join(", ", map { "fn$_"} (11..32));
话虽如此,如果你想知道如何从理论上做到这一点,就像一个“很酷的技术技巧”练习一样,我不知道通过 DBI 一般地做它的好方法,但你通常可以做到以特定于数据库的方式。
为此,您应该注意:
几乎所有数据库都通过某种“CREATE TABLE”语句创建表,该语句采用有序的列列表(大多数关系数据库实际上以该顺序在行中物理存储值,因此这很重要 - 即使理论上的关系正如 marcog 所说,微积分将列视为无序)。
几乎所有数据库都包含一个特殊的表,该表列出了哪些表包含哪些列(
syscolumns
在 Sybase 中,INFORMATION_SCHEMA.COLUMNS
在 MySQL 中),并且该表包含一个数字 ID用于订购它们的列与“创建”订单相同;甚至是特殊的“顺序”字段(例如 MySQL 中的ORDINAL_POSITION
值)。因此,您可以 - 提前 - 为您想要的表及其顺序查询有序的列列表。要查询 MySQL,
SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="XXX"
。将数据存储在@columns 列表中(或者如果您有很多表,则存储数组的散列,%columns,表名是键)。然后,在构建查询时,您只需说
“选择 $columns{table1}->[11],$columns{table1}->[13], ...”
请注意,发送到服务器的实际 SQL 将包含列名,但您不会在代码中的任何位置硬编码这些名称。
关于mysql - 如何通过表中的 "numeric"位置选择列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575015/