1

このクエリは 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 に答える