作为一个例子,我设置了一个简单的SQLite模式:
sqlite> CREATE TABLE foo (a TEXT, b INT, PRIMARY KEY(a, b));
sqlite> INSERT INTO foo (a, b) VALUES ('x', 5);
sqlite> INSERT INTO foo (a, b) VALUES ('x', 10);
sqlite> INSERT INTO foo (a, b) VALUES ('x', 15);
sqlite> INSERT INTO foo (a, b) VALUES ('y', 5);
sqlite> INSERT INTO foo (a, b) VALUES ('y', 12);
sqlite> INSERT INTO foo (a, b) VALUES ('y', 16);
b
表示时间戳,a
表示对象。当然,真正的应用程序包含更多列。
我想创建一个视图,其中包含(a, b)
到下一个较小值b
的映射,foo
中存在一个条目。对于上面的例子,它应该是这样的:
a | b | previous_b
---------------------
x | 10 | 5
x | 15 | 10
y | 12 | 5
y | 16 | 12
我尝试创建这样的视图:
CREATE VIEW prev
AS
SELECT
a,
b AS current_b,
(SELECT MAX(b) FROM foo WHERE b < current_b) AS previous_b
FROM foo;
但是,我似乎无法访问子查询中的current_b
:
sqlite> SELECT * FROM prev;
Error: no such column: current_b
我该如何解决这个问题?如果这是不可能的,还有其他选择吗?
答案 0 :(得分:2)
你不能使用这样的别名。使用
module.exports = new polls();
答案 1 :(得分:2)
您想要使用相关子查询。因此,您需要表别名和限定列名:
<?php
$string = "category=123&code=456&type=type111&type=type222";
$repeated_key = 'type';
$variable = explode('&', $string);
$data_o = array();
foreach ($variable as $key0 => $value0) {
$subvariable = explode('=', $value0);
if($subvariable[0] == $repeated_key){
continue;
}
$data_o[$subvariable[0]] = $subvariable[1];
}
$i=0;
foreach ($variable as $key1 => $value1) {
$subvariable = explode('=', $value1);
if($subvariable[0] != $repeated_key){
continue;
}
$data_t = array();
$data_t['type'] = $subvariable[1];
$data[] = array_merge($data_o,$data_t);
$i++;
}
echo "<pre>";
print_r($data);
exit;
?>
您应始终使用表别名和限定列名,尤其是在学习SQL时。在学习语言时养成正确的习惯。