3

SQL selectステートメントでこれを行うにはどうすればよいですか..

私がこのテーブルを持っていることを考えると

ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08

ID_A=AB23 には 2 つのエントリがあり、最初の行の DATE2 は 2 番目の行の DATE1 と同じであることがわかります。これは、これら 2 つの行が接続されていることを意味します。

では、select ステートメントを取得または作成して、相互に接続されているこれらの行を表示するにはどうすればよいでしょうか?

編集: select ステートメントでやろうとしていたことは次のとおりです。NULL でない場合は DATE2 をチェックします。 b. そこから、テーブル全体のDATE1に存在する場合はDATE2をチェックし、列の値を返します。

私が取得したいものは次のようになります。

ID_A - DATE1 - DATE2
=====================
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01

PSループを使用してこれを実行しないことを望んでいました.これは、データが多すぎるとサーバーの応答が遅くなりすぎる傾向があるためです。- 同じデータベース内の列を比較していることに注意してください..

@fthiella ここに、私が参照しているシナリオを含む私のサンプルデータがあります..

ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08
PQ10 - 11/20 - -n/a-
LM88 - 11/21 - -n/a-
PQ10 - 11/15 - 11/20

そこから私はこれらを取得したいと思います:

ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08

他のものを除外した理由の簡単な説明は次のとおりです。

ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08 - not excluded
AB23 - 11/20 - 11/22 - excluded because DATE2 is connected to DATE1 of same ID_A
AB23 - 11/22 - 12/01 - not excluded
XP72 - 11/23 - 12/08 - not excluded
PQ10 - 11/20 - -n/a- - excluded because DATE2 is null
LM88 - 11/21 - -n/a- - excluded because DATE2 is null
PQ10 - 11/15 - 11/20 - excluded because DATE2 is connected to DATE1 of same ID_A (regardless if DATE2 of that line is null)

条件の優先順位は次のとおりです。最初に DATE2 の null を除外し、次に比較をチェックして、他の行より前にある行を除外します。

お時間を割いて申し訳ありません。あなたが私に与えてくれたすべての助けに本当に感謝しています..今のところ、この質問は「回答済み」としてタグ付けできます。

4

3 に答える 3

1
SELECT date1.* FROM DATES date1 JOIN DATES date2 On date1.ID_A = date1.ID_A
WHERE date1.DATE2 = date2.DATE1
UNION
SELECT D2.* FROM DATES date1 JOIN DATES date2 On date1.ID_A = date2.ID_A
WHERE date1.DATE2 = date2.DATE1
于 2013-08-28T03:21:52.040 に答える
0

これを試すことができます

SELECT D1.* FROM DATES D1
JOIN DATES D2
On D1.ID_A = D2.ID_A
WHERE D1.DATE2 = D2.DATE1

UNION

SELECT D2.* FROM DATES D1
JOIN DATES D2
On D1.ID_A = D2.ID_A
WHERE D1.DATE2 = D2.DATE1
于 2012-11-29T08:43:43.097 に答える
0

私はこれを行います:

SELECT
  your_table.*
FROM
  your_table inner join your_table your_table_1
  on your_table.ID_A=your_table_1.ID_A
     and (your_table.DATE2 = your_table_1.DATE1
          or your_table.DATE1 = your_table_1.DATE2)

your_tableを使用してそれ自体と結合してinner joinいるため、各行に接続がある場合にのみ行が返されます (同じ ID_A、DATE2=DATE1 または DATE1=DATE2)。

編集:これにより、コメントに基づいて、接続のないレコードが得られるはずです:

SELECT your_table.*
FROM
  your_table left join your_table your_table_1
  on your_table.ID_A=your_table_1.ID_A
     and (your_table.DATE2 = your_table_1.DATE1)
WHERE your_table_1.ID_A is null
      and your_table.DATE2 is not null

ここではyour_table、左結合を使用して自分自身と結合しており、ID_A で結果をフィルター処理すると null になります。これは、このクエリが your_table 内のすべてのレコードを返すことを意味します。ただし、同じテーブル内の DATE2 が DATE1 と等しいレコードは除きます。DATE2 がすでに null の場合、結合は成功しないため、行が返されます。

于 2012-11-29T08:51:46.850 に答える