複数フィールド検索の 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 サイトの他の関連記事を参照してください。