1

次の 2 つのクエリを検討してください。

SELECT *, 'b'    AS b    FROM someTable ORDER BY a ASC LIMIT 1;
SELECT *, MAX(a) AS maxA FROM someTable ORDER BY a ASC LIMIT 1;

前のクエリは、a期待どおり、最小値の行を返します。後者のクエリは、ディスクに格納されている最初の行 (通常は主キーの値が最も小さい行) を返します。どうすればこれを回避できますか? 私の意図は、最も低い列の行全体を取得することですa値 (複数ある場合、必要なのは 1 つだけで、どちらでもかまいません)。さらに、最も高い年齢の値が必要です。完璧な世界では、2 つのクエリを実行することになりますが、このアプリケーションではオブジェクトがシリアル化される方法が原因で、私のものではない多くのコードをリファクタリングせずには実行できません。実際には、MySQL エンジン自体が 2 回クエリを実行する必要があるかどうかは気にしません。重要なのは、出力が 1 行で返されることです。残念ながら、このクエリのストアド プロシージャを作成することはできません。はい、*演算子は重要です。必要なフィールドをリストすることはできません。そして、行が多すぎてすべてを返すことができません!

この質問は前の質問と表面的には似ていますが、そこで尋ねられた質問は形式が正しくなく、あいまいであったことに注意してください。したがって、すべての回答は私の意図ではない問題に対処していました (どんなに有用であったとしても、私は多くのことを学びました。その通りになりました)。この質問は、意図した質問をより明確にするため、さまざまな回答を引き付けるはずです。

4

2 に答える 2

4

これを実行してみませんか:

SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable

残念ながら、MySQL はウィンドウ関数を認識していません。したがって、最小値/最大値と一緒に選択したい場合*は、JOIN に頼る必要があると思います。

SELECT * FROM 
(
  SELECT * FROM someTable ORDER BY a ASC LIMIT 1
) t1
CROSS JOIN
(
  SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable
) t2

または、Imre Lの回答にあるように、サブセレクトに

于 2012-08-16T07:38:31.360 に答える
2

選択部分でサブクエリを使用します。

SELECT *, 'b' AS b,
       (SELECT MAX(a) FROM someTable) AS maxA
  FROM someTable ORDER BY a ASC LIMIT 1;
于 2012-08-16T07:44:26.210 に答える