1

小さなフィルム データベースのタグ/カテゴリ クエリに問題があります。

私のテーブルは次のとおりです。

ID(index),Name(film name),category

1 つのムービーに複数のカテゴリを含めることができます。

SELECT Name  FROM categorytable WHERE category ='Action';

正常に動作しますが、他のタグが必要な場合は空のカーソルが表示されます:

SELECT Name  FROM categorytable WHERE category ='Action' AND category ='Sci-Fi';

選択例:

1  Film001        Action
2  Film001        Sci-Fi
3  Film002        Action

編集:私のホームデータベース:

ID|NAMEFILM|DESCRIPTION

完全なクエリは次のとおりです。

SELECT DATABASEFILM.NAMEFILM , DATABASEFILM.DESCRIPTION , NAME from DATABASEFILM , CATEGORY where DATABASEFILM.NAMEFILM=NAME AND category=(SELECT NAME  FROM CATEGORY WHERE category ='Action');
4

3 に答える 3

0
with mustAppear(category) as (
  select 'Action'
  union all
  select 'Sci-Fi'
)
  select Name -- select those film names for which
  from categorytable as C1
  where not exists ( -- there is no category that must appear with that name
    select M.category
    from mustAppear as M
    where not exists ( -- that does not.
      select *
      from categorytable as C2
      where C2.Name = C1.Name
      and C2.category = M.category
    )
  )

この方法でより直接的にすることもできます:

select Name
from categorytable
where category = 'Sci-Fi'
intersect
select Name
from categorytable
where category = 'Action';

前者のクエリの利点は、永続的なテーブル (mustAppear、またはテーブル変数 @mustAppear を使用できます) を作成して、一致する必要があるカテゴリ リストを保持する場合、変更せずに使用できることです。後者のクエリはより単純ですが、カテゴリが変更されたときに書き直す必要があります。

于 2013-08-02T06:24:46.443 に答える