1

クエリがテーブル A の計算をテーブル B の範囲と比較し、対応する値を 3 番目のテーブル (テーブル C) の範囲 (テーブル B) に日付に基づいて挿入する 2 つのテーブル (A と B) があります。 . ただし、テーブルAに毎日のデータがない可能性があり、その日は2番目に低い範囲に対して値を入力したいと考えています。

TABLE B
id(PK)|date| v1 | v2


TABLE A
Aid|id(FK)|MinRange|MaxRange|Value


TABLE C
Cid|b.date|id(FK)|b.v1|b.v2|A.value

次のような句IF EXISTSに埋め込む方法を探しています。WHERE

SELECT B.value 
from TableB B 
INNER JOIN TableA A ON A.id=B.id 
WHERE B.id=4 
and (IF DATA EXISTS) B.v1+B.v2 between A.min and A.max (ELSE Choose the second lowest A.min)`

上記のクエリは、私がやろうとしていることを説明するための例であるため、有効なクエリではありません。明らかなパフォーマンスの問題のためにサブクエリを使用したくありません。

よろしくお願いします。よろしくお願いします:)

4

1 に答える 1

2

これはどうですか

アップデート

DECLARE myvar INT;
SELECT COUNT(*) INTO myvar FROM TableB WHERE Date=p_date;
SELECT myvar;

IF(myvar>0)
    SELECT B.Date,A.Value
    from TableB B 
    left JOIN TableA A ON A.id=B.id 
    WHERE B.id=4 
ELSE
    SELECT p_date AS Date,predefinedvalue AS Value
END IF;

内部結合は一致するレコードのみを取得するため、左結合を使用する必要があります。また、一致するレコードがない場合は A から何もクエリできないため、定義済みの値を B に格納する必要があります。

SELECT CASE WHEN myvar>0 THEN B.Date
       ELSE p_date
       END AS Date,
       CASE WHEN myvar>0 THEN A.Value
       ELSE predefinedvalue
       END AS Value
from TableB B 
left JOIN TableA A ON A.id=B.id 
WHERE B.id=4 
于 2013-09-18T07:23:32.133 に答える