【问题标题】:Every derived table must have its own alias Error?每个派生表都必须有自己的别名 错误?
【发布时间】:2017-09-02 07:41:28
【问题描述】:

为什么我下面的子例程会抛出每个派生表都必须有自己的别名错误?

sub ok_wait
{
my $str= shift;
$DBH = &connect or die "Cannot connect to the sql server \n";
$DBH->do("USE $str;");
my $stmt="select name,jobs_ok,jobs_wait from (select name,jobs_ok,jobs_wait from files order by name limit 5) t union all select 'others',sum(jobs_wait)as jobs_wait,sum(jobs_ok)as jobs_ok from(select jobs_wait,jobs_ok from files order by name limit -1 offset 5) t;";
my $sth = $DBH->prepare( $stmt );
$sth->execute() or die $sth->errstr;
my $tmp = 0;
while(my @row_array=$sth->fetchrow_array)
{
if ($tmp == 0) {
$var_ok .= "\[\"$row_array[0] \($row_array[2]\)\",$row_array[2]\]";
$var_wait .= "\[\"$row_array[0] \($row_array[1]\)\",$row_array[1]\]";
$tmp++;
}
$sth->finish;
$DBH->disconnect();
}

【问题讨论】:

  • 可能是因为您的派生表没有别名?
  • 以上改动显示语法错误@billynoah
  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'from (select jobs_wait,jobs_ok from files order by name limit -1 ' @billynoah 附近使用的正确语法

标签: mysql perl


【解决方案1】:

更改了限制值

"select name,jobs_ok,jobs_wait from ((select name,jobs_ok,jobs_wait from files order by name limit 5) union all (select 'others',sum(jobs_wait)as jobs_wait,sum(jobs_ok) as jobs_ok from (select jobs_wait,jobs_ok from files order by name limit 0 offset 5) foo)) foo ";

注意:未测试我只是直接在这里输入,但基本上你需要为你的子查询添加一个别名。

【讨论】:

  • 对不起,我会把它留给 GurV,但语法错误可能是缺少括号。
  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'from (select jobs_wait,jobs_ok from files order by name limit -1 ' @Learning 附近使用的正确语法
  • 我已经用你的编码线精确地测试过了。这里每个括号都在右 mannee@Learning 中关闭
  • 如果把-1改成1?为什么你需要-1作为限制?你到底想做什么?
  • 通过使用 mysql 查询,我尝试获取最多 5 行,剩余的行被添加并存储为名为“others”@Learning 的新行名
猜你喜欢
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 2012-05-16
  • 2016-11-29
  • 1970-01-01
相关资源
最近更新 更多