2017-08-24 17 views
0

rowumberが+/- 1であるテーブル2に表示されるテーブル1のrownamesの数を取得するSQLコードの記述方法がわかりません。たとえば、私は、両脇の数字がお互いに1以内にあるため、両方に現れるように「独占」と「人気のエピソード」を数えます。しかし、私はギャップが> 1であるので、 '人気のある映画'を数えません。通常、私はテーブルをINTERSECTしますが、私は正確な一致のためにINTERSECTを使用する方法しか知りません。sql count 2つのテーブルのレコードがほぼ一致する

Table 1 
+------------------+-----------+ 
| rowname   | rownumber | 
+------------------+-----------+ 
| Exclusive  |   1 | 
| Popular Movies |   3 | 
| New Seasons  |   7 | 
| Popular Episodes |   8 | 
+------------------+-----------+ 

Table 2 
+------------------+-----------+ 
| rowname  | rownumber | 
+------------------+-----------+ 
| Exclusive  |   2 | 
| Popular Episodes |   7 | 
| Popular Movies |   8 | 
+------------------+-----------+ 

ご協力いただきありがとうございます!

+0

表1のNew Seasonsが1で、表2のNULL(存在しない)の場合はどうでしょうか? –

答えて

2

なぜ単純な結合ではないのですか?次のようなもの:

SELECT rowname 
FROM t1 JOIN t2 ON t1.rowname = t2.rowname 
WHERE t1.rownumber - t2.rownumber BETWEEN -1 AND 1 

名前を修正してください。

または番号を必要とする場合はSELECT COUNT(rowname)。

+0

rownameがTable1に複数回表示された場合(つまり、行1と12に表示される場合)、これはどのように変更されますか? – Slatemagic

+0

それは完全に異なる質問になります。 rownamesが一意でない場合、質問は意味をなさない(新しい論理が必要になる)。 –

+0

なぜこれが別の質問であるのか分かりません。 Popular Moviesがrownumber 3とrownumber 9の表1にあった場合、それを除外する代わりにPopular Moviesを含めるようにしたいと考えています。 – Slatemagic

0

「New Seasons」のようにどちらの表の空白レコードも1と考えると、LEFT JOINが代わりに使用されます。

SELECT t1.rowname 
    FROM table1 t1 
    LEFT JOIN table2 t2 
    ON t1.rowname = t2.rowname 
WHERE COALESCE(t1.rownumber,0) - COALESCE(t2.rownumber,0) BETWEEN -1 AND 1 
+0

ありがとう!私はこれらを試して、それがどのように行くのか教えてあげよう! – Slatemagic

+0

JOINまたはINNER JOINにはそれを含めないでください –

+1

私が投稿した例とは異なるデータセットでテストしました。私の間違い! – Slatemagic

関連する問題