0

IN句がORに対して行うように、複数のANDステートメントを実行する簡単な方法はありますか?

4

3 に答える 3

0

これは Stack Overflow でよくある質問なので、新しいタグを作成していsql-match-allます。戻って、この問題に関連する古い回答のいくつかにタグを付けてみます。

あなたの簡単な説明に基づいて、タグ付けされた記事 (php、mysql、パフォーマンス) など、一連の値のすべてに一致する行のグループを返したいと思っていると思います。述語では、IN()3 つのタグすべてが一致する必要はありませんが、特定のデータ行には 1 つのタグしかなく、WHERE 句は一度に 1 つの行しかテストできません。

この問題には 2 つの一般的な解決策があります。1 つ目は、行のグループ内の個別のタグの数を数えることです。一致させようとしているタグのリストと同じであれば、これはテストに合格します。

SELECT t.article
FROM Tags t
WHERE t.tag IN ('php', 'mysql', 'performance')
GROUP BY t.article
HAVING COUNT(DISTINCT tag) = 3;

もう 1 つの解決策は、探しているタグの数だけ自己参加することです。INNER JOIN を使用すると、一致するグループのみに結果セットを制限できます。

SELECT t1.article
FROM Tags t1
INNER JOIN Tags t2 USING (article)
INNER JOIN Tags t3 USING (article)
WHERE (t1.tag, t2.tag, t3.tag) = ('php', 'mysql', 'performance');

どちらのソリューションが優れているかは、照合するタグの数、アプリケーションでこのクエリを作成するのがどれほど便利か、および RDBMS のブランドが得意とする特定の最適化によって異なります。たとえば、MySQL は GROUP BY クエリの一時テーブルを書き込む傾向があるため、後者のソリューションは通常、MySQL ではるかに高速です。ただし、データベースで両方のクエリ タイプをテストして、確認する必要があります。

于 2011-12-09T19:50:14.420 に答える
0

ALL キーワードを使用しますか?

http://dev.mysql.com/doc/refman/5.5/en/all-subqueries.html

于 2011-12-09T19:37:00.680 に答える
0

一般的には不可能です
。列には 1 つの値しか格納でき
ません。次のような状況はありません。status = 1 AND status =2

例外的なケースはset data type

于 2011-12-09T19:39:14.167 に答える