1

こんにちは、「Case with multiple columns」の質問を調べましたが、これと同じものが見つからないので、質問する必要があると思います。

基本的に、結合したい 2 つのテーブル (どちらもサブクエリの結果) があります。それらは同じ列名を持っています。それらをIDで結合すると、SELECT *各行が次のようになります。

A.id, A.x, A.y, A.z, A.num, B.id, B.x, B.y, B.z, B.num

私が欲しいのは、num の値が小さいテーブルの列のみを選択する方法です。したがって、この場合、結果テーブルには常に 5 つの列があり、事後にどのテーブルから来たid, x, y, z, numかは気にしません。id, x, y, z, numまた、どちらのテーブル結果も同じであれば問題ありません。

SELECT CASE WHEN A.num < B.num THEN A.* ELSE B.* END FROM A JOIN B ON A.id=B.id

完璧ですが、CASEステートメントで1つの列しか返すことができず、すべての列にCASEを使用できますが、それは非常に無駄に思えます(実際のデータベースの各テーブルには8つあるため、8つのCASEステートメントがあります)。

これはところでSQLiteです。どんな助けでも大歓迎です!


A と B の詳細については、編集してください: A と B は、次のようなクエリから取得されます。

SELECT "考えられたケースのステートメントがここに入る可能性があります" FROM

(SELECT id, x, y, z, num FROM Table1 a JOIN Table2 b ON a.id=b.id AND (y BETWEEN (53348574-3593) AND (53348574+3593)) AND (z BETWEEN (-6259973-6027) ) AND (-6259973+6027)) JOIN Table3 c ON c.id= b.id GROUP BY a.id, cr) A

加入

(SELECT id, x, y, z, num FROM Table1 a JOIN Table2 b ON a.id=b.id AND (y BETWEEN (53401007-3593) AND (53401007+3593)) AND (z BETWEEN (-6397286-6027) ) AND (-6397286+6027)) JOIN Table3 c ON c.id= b.id GROUP BY a.id, cr ) B ON A.id=B.id

そのため、地理位置情報に基づいて作成された 2 つのテーブルを結合します。なぜ大きな数字なのか疑問に思っている場合は、いずれかの場所で見つかった属性に基づいて、どちらのテーブルからデータを取得するかを決定する必要があります。

4

2 に答える 2

1

あなたが望むものをサポートするRDBMSを知りません。8 つの CASE ステートメントを記述する必要があります。でもなんでこんなに無駄遣いするの?それともただの怠け者ですか?:)

編集:

RDBMS が行っていることを記述SELECT * ...すると、システム テーブル (information_schema など) にクエリを実行し、テーブル内の列のリストを取得します。だからあなたが書くとき

SELECT CASE WHEN A.num < B.num THEN A.* ELSE B.* END ...

あなたは基本的に書く

SELECT CASE WHEN A.num < B.num THEN A.num, A.whatever, A.more, ... ELSE B.num, B.whatever, B.more... END FROM A JOIN B ON A.id=B.id

残念ながら、これは間違った構文です。

于 2012-10-05T12:47:56.273 に答える
1

試す

select A.id, A.x, A.y, A.z, A.num from  A JOIN B ON A.id=B.id where a.num<b.num
union
select b.id, b.x, b.y, b.z, b.num from  A JOIN B ON A.id=B.id where b.num<a.numhere
于 2012-10-05T12:49:01.237 に答える