我有一个包含约500,000行的表t
。其中一列(stringtext
包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移到单独的表t
中并仅在s
中引用它们来整理表t
。
我使用长字符串创建了一个单独的表,其中包括有效的显式行索引号:
CREATE TEMPORARY TABLE stmp AS
SELECT DISTINCT
stringtext
FROM t;
CREATE TABLE s AS
SELECT _ROWID_ AS stringindex, stringtext
FROM stmp;
(正在创建此表,向我显示只有几个不同的字符串)。
现在如何用t
中的相应字符串索引替换s
中的字符串文本?
答案 0 :(得分:1)
我会考虑类似<?php
class UpperNameApi extends SugarApi
{
public function registerApiRest()
{
return array(
'UpperNameRequest' => array(
//request type
'reqType' => 'POST',
//endpoint path
'path' => array('Leads', 'UpperName'),
//endpoint variables
'pathVars' => array('module',''),
//method to call
'method' => 'UpperNameMethod',
//short help string to be displayed in the help documentation
'shortHelp' => 'Example endpoint',
//long help to be displayed in the help documentation
'longHelp' => 'custom/clients/base/api/help/MyEndPoint_MyGetEndPoint_help.html',
),
);
}
public function UpperNameMethod($api, $args)
{
if (isset($args['record']) && !empty($args['record'])) {
$bean = BeanFactory::getBean('Leads', $args['record']);
if (!empty($bean->id)) {
$first = $bean->first_name;
$first = ucwords($first);
$bean->first_name = $first;
$last = $bean->last_name;
$last = ucwords($last);
$bean->last_name = $last;
$bean->save();
}
return 'success';
}
return 'failed';
}
}
的事情,并建议首先在Update t set stringtext = (select stringindex from s where s.stringtext = t.stringtext)
上建立索引,因为SQLite可能不够聪明,无法建立临时索引。然后将进行VACUUMing。
未经测试。