2012-02-14 6 views
2

テーブルに新しい価格帯を挿入したいのですが、価格帯が既に含まれているかどうか、または他の価格帯の一部であるかどうかを確認する必要があります。ここでMySQLでどの価格帯に価格帯が含まれているかどうかを確認するには?

例です。

私の価格範囲テーブル:私が提出した場合

| minimum | maximum | 
--------------------- 
|  1 |  100 | 
|  201 |  300 | 
|  301 |  400 | 
  • [50200] 50は、範囲[1100]に含まれているので、私はそれを拒否しなければなりません。
  • 私は[175,201]を提出すると、[201,300]の範囲に201が含まれているので、私はそれを拒絶する必要があります。
  • 私は[350,380]を提出すると、350と380が[301,400]の範囲に含まれているため、私はそれを拒絶する必要があります。
  • [120,190]を提出した場合、となります.120と190はどの範囲にも含まれていないためです。

私の質問は、送信された範囲がテーブルに含まれているかどうかを確認する方法です。

答えて

1

これは動作する必要があり(表を仮定がrangesと呼ばれ、新しい範囲パラメータが@lowであり、それぞれ@high):もちろん

IF(NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @low BETWEEN minimum AND maximum) 
    AND 
    NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @high BETWEEN minimum AND maximum)) 
BEGIN 
    INSERT INTO ranges 
     (minumum, maximum) 
     VALUES 
     (@low, @high) 
END 

、これがさらに合体/凝縮かもしれない:

IF(NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @low BETWEEN minimum AND maximum 
        OR @high BETWEEN minimum AND maximum)) 
BEGIN 
    INSERT INTO ranges 
     (minumum, maximum) 
     VALUES 
     (@low, @high) 
END 

そしてさらに:

INSERT INTO ranges 
    (minimum, maximum) 
SELECT T.minimum, T.maximum 
    FROM (SELECT @low as minimum, @high as maximum) T 
WHERE NOT EXISTS (SELECT * 
        FROM ranges 
        WHERE @low BETWEEN minimum AND maximum 
         OR @high BETWEEN minimum AND maximum) 
0

テストする新しい値がrangestart, rangeendであると仮定すると、開始値または終了値がminimum AND maximumの行を選択します。結果の行は、範囲が重複していて追加できないことを示します。このクエリが行を返さない場合、範囲は重複せず有効です。

SELECT 
    TRUE 
FROM ranges 
WHERE 
    rangestart BETWEEN minimum AND maximum 
    OR rangeend BETWEEN minimum AND maximum 
0

はこれを試してみてください。

SELECT 'True' as Result 
    FROM PriceRange 
WHERE iStartValue BETWEEN minimum AND maximum OR 
     iEndValue BETWEEN minimum AND maximum 
1
INSERT INTO priceranges 
    SELECT * FROM 
    (SELECT <newminprice>, <newmaxprice>) AS baseview 
    WHERE NOT EXISTS (
    SELECT * FROM ranges 
    WHERE <newminprice> BETWEEN minimum AND maximum 
     OR <newmaxprice> BETWEEN minimum AND maximum 
) 

は1つのクエリでそれを行う必要があります

+0

私のための完璧な作品 –

関連する問題