DBI 从表中选择所有数据与子集数据

Posted

技术标签:

【中文标题】DBI 从表中选择所有数据与子集数据【英文标题】:DBI selecting from tables all vs subset data 【发布时间】:2014-02-19 14:48:19 【问题描述】:

如果定义了 $input,我有以下代码接受来自用户的输入:

代码将选择所有具有 field1= $input 的数据,否则代码将选择表中的所有数据

   if (defined $input) 

my $sth= $dbh->prepare("select field1,field2 from mytable where field1 = ?  ");
$sth->execute($value);
    else 
    my $sth= $dbh->prepare("select field1,field2 from mytable");
$sth->execute();

  

我将相同的代码复制到多个具有不同数据字段的表中。

我想知道 DBI 是否有一个选项可以将这 2 个查询合并为一个查询以更易于维护?

【问题讨论】:

根据 $input 构建 $where 并将其附加到选择查询。 【参考方案1】:

这是我通常的做法:

my (@where, @params);

if (defined $input) 
  push @where, 'field1=?';
  push @params, $input;


# push more clauses onto arrays as needed

my $sql="select field1,field2 from mytable";
if (@where) 
  $sql .= " WHERE ".join (' AND ',@where);


my $sth= $dbh->prepare($sql);
$sth->execute(@params);

这样做的好处在于您可以根据需要添加任意数量的子句。

【讨论】:

join(' and ', @where) @mpapec 是的,这就是我的意思 可能是mytableWHERE的空间【参考方案2】:

你不能这样做:

select field1,field2 from mytable where ((? is null) or (field1 = ?))

【讨论】:

以上是关于DBI 从表中选择所有数据与子集数据的主要内容,如果未能解决你的问题,请参考以下文章

从表中的两列中选择相同的数据,并使用一条sql语句显示所有数据

如何在Oracle中添加一个策略,用户可以从表中选择所有数据,并且只能插入、更新、删除有条件的数据

从表中选择所有行并仅将不同的值插入到 C# 中另一个位置的数据库中

从表中选择最后修改的数据记录

根据日期参数从表中选择周末或工作日数据

使用R(DBI包)从SQL Server表中删除行