1

他の 2 つのテーブル間に多対多の関係を作成するジャンクション テーブルがあります。これが図です。

ここに画像の説明を入力

これが私の基本SQLクエリです。

SELECT `tag_to_url`.url_id, `websites`.url, `tags`.tag_name 
FROM `tag_to_url` 
INNER JOIN (`websites`,`tags`) ON `websites`.url_id = `tag_to_url`.url_id 
AND `tag_to_url`.tag_id = `tags`.tag_id 
ORDER BY `tag_to_url`.url_id

その結果の一例です。

+--------------------+-------------+
|         url        |   tag_name  |
+--------------------+-------------+
|     google.com     |    search   |
|     google.com     |    e-mail   |
| stackexchange.com  |     q&a     |
| stackexchange.com  | programming |
| stackexchange.com  |   database  |
+--------------------+-------------+

これらの結果は基本的に私が探しているものですが、正しく機能しない URL をグループ化しようとしました。WHERE句を 1 つ含めると、クエリも適切に機能します。

...
...
WHERE `tags`.tag_name = 'database'

+--------------------+-------------+
|         url        |   tag_name  |
+--------------------+-------------+
| stackexchange.com  |   database  |
+--------------------+-------------+

しかし、条件にAND演算子を追加するとWHERE、これが期待されます。

WHERE `tags`.tag_name = 'database' AND `tags`.tag_name = 'q&a'

+--------------------+-------------+
|         url        |   tag_name  |
+--------------------+-------------+
| stackexchange.com  |   database  |
| stackexchange.com  |     q&a     |
+--------------------+-------------+

しかし、私は得る:

MySQL returned an empty result set (i.e. zero rows). (Query took 0.0027 sec)

で条件を追加しようとしましONJOINが、結果は同じでした。私は何を間違っていますか?

編集 :

このクエリの目的は、関連付けられた URL のリストとともに 1 つ以上のタグを取得することです。ANDこれらの特定のタグのみを取得するには、複数の演算子を使用できる必要があります。質問 (URL) と複数のタグが添付されたスタック オーバーフローのように機能する必要があります。

4

2 に答える 2