私はSQLの初心者なので、心配しないでください:)
辞書の単語の翻訳を保存するテーブルがあります。この表にはid
、la
(言語)、lb
(ターゲット言語)、wa
(元の単語)、wb
(翻訳された単語)、およびいくつかの重要でない列があります:)。テーブルの概要を表示したいと思います。ここには、各言語の単語数を含むすべての言語のリストと、合計単語数 (異なる単語のみのすべてのカウント) を含む言語としての SUM の行があります。
私はこのクエリを書きました:
SELECT `lng`, COUNT(`word`) AS `count`
FROM (
SELECT DISTINCT *
FROM (
SELECT DISTINCT `la` AS `lng`, `wa` AS `word`
FROM `dict_trans`
UNION ALL
SELECT DISTINCT `lb` AS `lng`, `wb` AS `word`
FROM `dict_trans`
) AS `tbla`
) AS `tblb` GROUP BY `lng`
UNION ALL
SELECT 'sum' AS `lng`, COUNT(`word`) AS `count`
FROM (
SELECT DISTINCT *
FROM (
SELECT DISTINCT `la` AS `lng`, `wa` AS `word`
FROM `dict_trans`
UNION ALL
SELECT DISTINCT `lb` AS `lng`, `wb` AS `word`
FROM `dict_trans`
) AS `tblc`
) AS `tbld` ORDER BY `count` DESC
しかし、サブクエリをもう1つ実行するのは非常にばかげており、パフォーマンスに優しくないと思います。
SELECT DISTINCT *
FROM (
SELECT DISTINCT `la` AS `lng`, `wa` AS `word`
FROM `dict_trans`
UNION ALL
SELECT DISTINCT `lb` AS `lng`, `wb` AS `word`
FROM `dict_trans`
) AS `tbla`
コードの2番目の部分で、最初の部分からテーブルへの参照を渡すことを試みました:
SELECT `lng`, COUNT(`word`) AS `count`
FROM (
SELECT DISTINCT *
FROM (
SELECT DISTINCT `la` AS `lng`, `wa` AS `word`
FROM `dict_trans`
UNION ALL
SELECT DISTINCT `lb` AS `lng`, `wb` AS `word`
FROM `dict_trans`
) AS `tbla`
) AS `tblb` GROUP BY `lng`
UNION ALL
SELECT 'sum' AS `lng`, COUNT(`word`) AS `count`
FROM `tblb`
ORDER BY `count` DESC
しかし、エラーがスローされました (#1146 - テーブル 'db.tblb' が存在しません)。
一時テーブルを作成せずにこの問題を解決することは可能ですか?