次のテーブルとクエリがあります。
CREATE TABLE IF NOT EXISTS `sizes` (
`id_size` INT NOT NULL ,
`cm_min` INT NOT NULL ,
`cm_max` INT NOT NULL ,
PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;
insert into sizes values
(1, 56, 59),
(2, 63, 67),
(3, 70, 74),
(4, 76, 79),
(5, 83, 86),
(6, 60, 62),
(7, 12, 14);
SELECT * FROM sizes
WHERE cm_min >= 13 AND cm_min <= 66 OR
cm_max >= 13 AND cm_max <= 66
AND cm_min =
(SELECT min(cm_max) FROM sizes
WHERE (cm_min >= 13 AND cm_min <= 66) OR
(cm_max >= 13 AND cm_max <= 66))
UNION
SELECT * FROM sizes
WHERE cm_min >= 13 AND cm_min <= 66 OR
cm_max >= 13 AND cm_max <= 66
AND cm_min =
(SELECT min(cm_min) FROM sizes
WHERE (cm_min >= 13 AND cm_min <= 66) OR
(cm_max >= 13 AND cm_max <= 66))
ORDER BY cm_max ASC;
ご覧のとおり、値が12と66の例を次に示します。このクエリに次の2つの条件を追加する必要があります。
導入された値の範囲がすべてのテーブルの中で最小である場合、クエリは最小値を持つ行のデータのみを返します。例:値が9と10の場合、数値が小さいため、結果はid_size7になります。
導入された値の範囲がすべてのテーブルの中で最大である場合、クエリは最大値を持つ行のデータのみを返します。例:値が112と113の場合、数値が大きいため、結果はid_size5になります。
上記の条件をクエリに追加する方法を知っていますか?単純化できますか?