sql >> Databáze >  >> RDS >> Mysql

MySQL:zkontrolujte, zda je hodnota obsažena v intervalu rozsahu

Měli byste mít dvě tabulky:jednu pro sloupce a jednu pro rozsahy sloupců. Díky tomu jednoduchý dotaz načte to, co potřebujete.

CREATE TABLE foo (
    foo_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (foo_id)
)
ENGINE=InnoDB;

CREATE TABLE foo_range (
    foo_id INT(10) UNSIGNED NOT NULL,
    column_from INT(10) UNSIGNED NOT NULL,
    column_to INT(10) UNSIGNED NOT NULL,
    INDEX foo_range_fk1 (foo_id),
    CONSTRAINT foo_range_fk1 FOREIGN KEY (foo_id) REFERENCES foo (foo_id)
)
ENGINE=InnoDB;

INSERT INTO foo(foo_id)
VALUES (1), (2), (3);

INSERT INTO foo_range(foo_id, column_from, column_to)
VALUES (1, 400, 500), (2, 45, 74), (2, 23, 25), (3, 12, 14), (3, 19, 21);

SELECT foo_id
FROM foo_range
WHERE 421 BETWEEN column_from AND column_to;

A ve skutečnosti není hlavní tabulka ani nutná, pokud nechcete ukládat další data :)

Pokud jste uvízli u jiného návrhu DB, budete pravděpodobně muset načíst všechny řádky a použít jazyk na straně klienta, abyste provedli párování.



  1. ResultSet je z UPDATE. Žádná data

  2. MySQL SELECT n záznamy založené na GROUP BY

  3. jak přiřadit hodnotu proměnné ve výrazu pro blok PL/SQL?

  4. ORA odstranit / zkrátit