1

私はこのようなmysqlテーブルを持っています:

nid |  vid |  tid

nid値のリストを取得しようとしています。ここで、tid19 ANDから任意の値です53, 16 or 8910現在のテーブルによると、クエリは=19(4行目)とIN (53,16,89)(最後の行)を返すと思います。

私はこれを次のような2つの別々のクエリとして取得できます。

SELECT nid FROM {term_node} WHERE tid IN (53,16,89)

SELECT nid FROM {term_node} WHERE tid = 19

(term_nodeはスクリーンショットのテーブルです)。このアプリケーションにはPHPを使用しているので、これら2つのクエリの結果を組み合わせて、目的の結果(10)を取得できます。しかし、単一のデータベースクエリからこれを取得する方法があると思います。

ユニオンについて読んだのですが、正直なところ、使い方がわかりません。質問がはっきりしていることを願っておりますので、よろしくお願いいたします。

4

2 に答える 2

3

ここUNIONでは役に立ちません。欲しいのは交差点です。一部のデータベースには、INTERSECT必要なことを実行するキーワードがありますが、残念ながらMySQLにはありません。

内部結合を使用して、必要なものを取得できます。

SELECT DISTINCT TN1.nid
FROM term_node AS TN1
JOIN term_node AS TN2
ON TN1.nid = TN2.nid
AND TN2.tid = 19
WHERE TN1.tid IN (53, 16, 89)

オンラインで動作することを確認してください:sqlfiddle

于 2012-08-18T19:50:47.753 に答える
2

ユニオンは必要ありません。これは、WHEREにすべてのtidを追加することで簡単に実行できます。これを試してください

SELECT nid FROM {term_node} WHERE tid IN (53,16,89, 19)
于 2012-08-18T19:53:49.877 に答える