ホームページ > データベース > mysql チュートリアル > MySQL で単一のサブクエリから複数の列を選択するにはどうすればよいですか?

MySQL で単一のサブクエリから複数の列を選択するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-26 22:43:02
オリジナル
395 人が閲覧しました

How to Select Multiple Columns from a Single Subquery in MySQL?

MySQL の単一のサブクエリから複数の列を選択する

問題

複数のテーブルを扱う場合、複数の列を選択する必要がある場合があります。サブクエリ。ただし、サブテーブルに欠落レコードがある場合、単純な結合では望ましい結果が得られない可能性があります。

解決策

この問題を解決する鍵は、テーブルが両方の物理テーブルから派生できることを理解することにあります。そしてサブクエリ。この概念を活用すると、単一のサブクエリから複数の列を取得できるようになります。

次の例を考えてみましょう:

SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
  SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
  FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
ログイン後にコピー

この例では、サブクエリは、次の内容を含む仮想テーブル b を生成します。目的の列。この仮想テーブルをメイン テーブル a と結合することで、単一のクエリで必要なデータをすべて取得できます。

手法の拡張

この手法は、サマリー テーブルやグループ化テーブルを含めるようにさらに拡張できます。 。たとえば、次のクエリは、各属性の翻訳数を含む仮想テーブル c を生成します。

SELECT a.attr, b.id, b.trans, b.lang, c.langcount
FROM attribute a
JOIN (
  SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute
  FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
JOIN (
  SELECT count(*) AS langcount,  at.attribute
  FROM attributeTranslation at
  GROUP BY at.attribute
) c ON (a.id = c.attribute)
ログイン後にコピー

このクエリは、各属性の翻訳数とともに必要な列を返します。

パフォーマンスに関する考慮事項

この手法には柔軟性がありますが、パフォーマンスを考慮する必要があります。 MySQL オプティマイザーは同様のサブクエリをマージできますが、サブクエリの過度の使用を避け、効率を高めるためにクエリを最適化することをお勧めします。シナリオによっては、複数のテーブルを結合する方が効率的なオプションとなる場合があります。

以上がMySQL で単一のサブクエリから複数の列を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート