たとえば、1 つの列 ID を持つ head-table と、id、head-id (head-table => 1 から N への参照)、および値を持つ position-table があります。ここで、ヘッド テーブルの 1 つの行、たとえば ID 1 を選択します。位置テーブルを調べると、ヘッド テーブルを参照し、値が 1337 と 1338 である 2 つの行が見つかります。これらの値 1337 と 1338 を持つ 2 つの位置。これは M 対 N の関係ではないため、位置 ID は同じではなく、値のみです。誰でもSQLステートメントを教えてもらえますか? 私はそれを成し遂げる考えがありません:/
2 に答える
0
あなたが持っていると仮定します:
Create table head
(
id int
)
Create table pos
(
id int,
head_id int,
value int
)
値で重複を見つける必要がある場合は、次を使用します。
Select distinct p.head_id, p1.head_id
from pos p
join pos p1 on p.value = p1.value and p.head_id<>p1.head_id
where p.head_id = 1
特定の head_id の場合、またはすべての head_id の last where なし
于 2012-05-21T21:15:17.273 に答える
0
位置テーブル内の特定の headid に対して値が繰り返されず、決して NULL でないと仮定すると、次のロジックを使用してこれを行うことができます。気になる特定のヘッド位置に対して、位置テーブルで完全外部結合を実行します。次に、完全一致があるかどうかを確認します。
次のクエリはこれを行います。
select *
from (select p.headid,
sum(case when p.value is not null then 1 else 0 end) as pmatches,
sum(case when ref.value is not null then 1 else 0 end) as refmatches
from (select p.value
from position p
where p.headid = <whatever>
) ref full outer join
position p
on p.value = ref.value and
p.headid <> ref.headid
) t
where t.pmatches = t.refmatches
値に NULL がある場合は、coalesce を使用してこれらに対応できます。重複がある場合は、この場合の対処方法をより明確に指定する必要があります。
于 2012-05-21T20:58:52.467 に答える