ホームページ > データベース > mysql チュートリアル > MySQL で複数フィールド検索のための SQL の INTERSECT 機能を複製するにはどうすればよいですか?

MySQL で複数フィールド検索のための SQL の INTERSECT 機能を複製するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-05 20:53:47
オリジナル
241 人が閲覧しました

How to Replicate SQL's INTERSECT Functionality for Multiple Field Searches in MySQL?

複数フィールド検索の INTERSECT に相当する MySQL

SQL では、INTERSECT 演算子は 2 つ以上の SELECT ステートメントを結合し、一致する行のみを返します。すべての条件を満たします。あるユーザーは最近、MySQL で INTERSECT を使用して複数フィールド検索を実行する際に課題に直面しました。

クエリ

次のクエリは、クエリから 'id' フィールドを取得することを目的としていました。 「firstname」と「lastname」の両方について「data」テーブル内の特定の値と一致した行の「records」テーブルフィールド:

SELECT records.id 
FROM records, data 
WHERE data.id = records.firstname 
AND data.value = "john"
INTERSECT
SELECT records.id 
FROM records, data 
WHERE data.id = records.lastname 
AND data.value = "smith"
ログイン後にコピー

MySQL 代替

残念ながら、MySQL は INTERSECT 演算子をサポートしていません。ただし、同じ結果を得る別の方法がいくつかあります。

内部結合

1 つの方法は、一致するすべての行を返す内部結合を使用することです。両方のテーブルの値:

SELECT DISTINCT records.id 
FROM records
INNER JOIN data d1 on d1.id = records.firstname AND d1.value = "john"
INNER JOIN data d2 on d2.id = records.lastname AND d2.value = "smith"
ログイン後にコピー

IN句

もう 1 つの代替案は、サブクエリに値が存在するかどうかをテストする IN 句を使用することです。

SELECT DISTINCT records.id 
FROM records
WHERE records.firstname IN (
    select id from data where value = 'john'
) 
AND records.lastname IN (
    select id from data where value = 'smith'
)
ログイン後にコピー

これらの MySQL 互換の代替案は、複数のフィールドを実行するための効果的なソリューションを提供します。検索を実行し、高いレベルの柔軟性とパフォーマンスを提供します。

以上がMySQL で複数フィールド検索のための SQL の INTERSECT 機能を複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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