0

次のような構造がある場合:

CREATE TABLE things (
    id,
    personA varchar2,
    personB varchar2,
    attribute ...,
)

そして、特定の属性について、自分のすべてのものに対して少なくとも 1 人の一般人がいる場合、どうすればよいかを調べたいと思います。

したがって、私のデータが次の場合 (属性ごとに 2 つ以上になる可能性があります):

1, John, Steve, Apple
2, Steve, Larry, Apple
3, Paul, Larry, Orange
4, Paul, Larry, Orange
5, Chris, Michael, Tomato
6, Steve, Larry, Tomato

Apple の場合、Steve は私の一般人であり、Orange の場合は Paul と Larry の両方であり、Tomato の場合、私には一般人はいません。ただし、これらすべてを一度に返すクエリは必要ありません。私はこれらの属性の 1 つを持っており、共通点の種類に応じて 0、1、または 2 行が必要です。私は何かを考え出そうとしていますが、よくわかりません。

4

3 に答える 3

1

ここに1つの方法があります。

数値のリストにクロス結合することでアンピボット メソッドを実装し (Alex が使用するアンピボット メソッドを使用できます)、結果セットを結合します。

with
  row_generator as (
    select 1 counter from dual union all
    select 2 counter from dual),
  data_generator as (
    select
      attribute,
      id       ,
      case counter
        when 1 then persona
        when 2 then personb
      end person
    from
      things,
      row_generator)
select
  t1.attribute,
  t1.person
from
  row_generator t1,
  row_generator t2
where
  t1.attribute = t2.attribute and
  t1.person    =  t2.person   and
  t1.id        != t2.id;
于 2013-04-11T18:57:09.860 に答える