手元に奇妙な問題があり、SQL が非常に苦手であると確信しています。
問題は次のとおりです。
table1 と table2 の 2 つのテーブルがあります。両方のテーブルには、ID 番号、X 番号、Y 番号という同じ列のセットがあります。ここで、X と Y の値は 0 または 1 になります。
たとえば、テーブル 1 では ID の範囲が 1 ~ 100 で、テーブル 2 では 91 ~ 200 の範囲であるとします。 91-100 である Y の次の 10 個の値は table2 にあります。
ここで、X=1 と Y=1、X=1 と Y=0 などのさまざまなクエリに対して count(*) を呼び出すと、テーブル 2 に Y 値のセットが存在するため、正しい値が得られません。私は左の結合を見ていましたが、どういうわけかこれが正しいアプローチであるかどうかわかりません。
Table1
-------
Id X Y
1 1 1
2 1 1
3 1 1
4 1 0
5 1 0
Table2
-------
Id X Y
4 0 1
5 0 1
6 0 0
7 0 0
8 0 0
9 1 1
したがって、X=1、Y=1 とすると、カウント (*) として 5 を取得する必要があります。
こんにちはジャスティン、実際のシナリオを説明させてください。P1、P2、および P3 が X、Y、および Z 列にすぎないキャッシュを持つ 3 つのプロセス p1、p2、および p3 を考えてみます。このキャッシュの内容は ID に他なりません。IF p1 dumps and Id 1 ID=1 に対して X=1 と言うでしょう。これらの各プロセスは、g1 と g2 などのグループにキャッシュをダンプします。g1 と g2 に関するテーブルを作成しました。したがって、g1 は table1 を表し、g2 は table2 を表します。p1、p2、および p3 のそれぞれには、たとえば 100 個の ID をダンプするという制限があります。P1 が ID の 1 ~ 100 を g1(table1) にダンプした可能性があります。ここで、p2 は g1(table1) に 90 だけをダンプし、残りの 10 を g2(table2) にダンプしました。同様に、p3 は g1(table1) に 95 をダンプし、残りのg2(テーブル2)で5。ただし、p1、p2、および p3 はそれぞれ 100 個の ID をダンプしましたが、グループは異なります。今、カウントを取得したい場合() 理想的なケースでは、すべての P1、P2、および P3 が g1 にキャッシュをダンプした場合、P1=1 の g1 から max(id) を取得し、P1=1 の g1 から同様に min(id) を取得します。「select count( ) from g1 where X=1 and Y=1 and Z=1 where ID between g1 from min(id) and max(id) from g1. 理想的なケースでは、 100 が返されましたが、現在のケースでは正しくない 90 が返されているため、この問題を解決するには、g2(table2) に存在する ID も考慮する必要があります。
これがあなたの質問に答えることを願っています。
ありがとう