1

我只能将此查询应用于一个表,我想将其应用于临时表中的 5 个表,并按字母顺序记录。因为它有超过 5000 条记录的冻结问题,解决方案是在“a 字母”开始和“b 字母”之后应用记录......到“z 字母”结尾

阿曼达安娜贝尔 . . 齐普林赞比亚

重要的是第一个字母应该按字母顺序排列

不久我想制作一个临时表并在第一个字母上按字母顺序应用查询。我该怎么做?

UPDATE
  names INNER JOIN
  (SELECT   n1.id, n1.name, count(n2.id)+1 cnt
   FROM     names n1 INNER JOIN names n2
            ON n1.name=n2.name AND n1.id>n2.id
   GROUP BY n1.id, n1.name) s
  ON names.id = s.id
SET
  names.name = CONCAT(names.name, '.', s.cnt)
4

2 回答 2

1

如果您想从多个表中收集数据,我会使用 UNION 或者 - 如果您不想/不需要过滤掉重复项 - UNION ALL(应该会快一点)。

例子:

SELECT col1, col2
FROM table1
UNION ALL
SELECT col3, col4
FROM table2

如果你想要它排序,这就是方式(如果我没记错的话)

SELECT col1 as column1, col2 as column2
FROM table1
UNION ALL
SELECT col3 as column1, col4 as column2
FROM table2
ORDER BY column1

如果您遇到性能问题,请考虑将您的临时表设为实际表。您可以在(重新)填充之前通过简单地截断它来“清理”它,然后您可以对要添加的每个表使用插入查询。无需对其进行排序,因为您可以在您的桌子上执行 SELECT/ORDER BY。

如果以上内容对您没有帮助,也许您可​​以添加一个示例,说明您从什么数据开始以及所需的结果?

于 2013-07-31T08:45:26.863 回答
0

你在寻找这样的东西吗?

CREATE TEMPORARY TABLE temp_names LIKE names;

INSERT INTO temp_names
SELECT id, CONCAT(name, COALESCE(CONCAT('.', rnum), '')) name
  FROM
(
  SELECT id, name, @n := IF(@g = name, COALESCE(@n, 0) + 1, NULL) rnum, @g := name
    FROM names
   ORDER BY name
) q;
于 2013-07-31T07:07:58.703 回答