如何按字母顺序查询多个表?

时间:2013-07-31 05:46:46

标签: mysql sql

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

阿曼达 anabele 。 。 。 zeplin 赞比亚

重要的是第一封信应按字母顺序排列

很快我想创建一个临时表并在第一个字母上按字母顺序应用查询..我该如何制作?

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)

2 个答案:

答案 0 :(得分: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。

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

答案 1 :(得分: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;