Как выполнять запросы диапазона по таблицам в SQL - PullRequest
1 голос
/ 16 ноября 2011

У меня есть две таблицы в базе данных MySQL.В первом столбце данных в таблице A (A1) у меня есть целочисленные значения.В первом и втором столбцах таблицы B (B1 и B2) у меня также есть целочисленные значения.Я хотел бы создать запрос, который дал бы мне значения, где A1 находится в диапазоне B1 - B2.Можно ли это сделать с помощью запроса MySQL?

Вот пример того, что я хотел бы знать, как это сделать:

Table A        Table B    
-------        -------    --------
123            12         24
451            450        455
199            202        210
0              499        567
23             5          40

Требуемый SQL-запрос вернул бысоответствующие значения A1, B1 и B2:

451    450     455
23     12      24
23     5       40

Ответы [ 5 ]

2 голосов
/ 16 ноября 2011
select * from a, b where a1 between b1 and b2

так же просто, как и перекрестные соединения.По крайней мере, это эквивалент внутреннего объединения в MySQL и Oracle.

0 голосов
/ 16 ноября 2011

Вот запрос:

SELECT A.a1,B.b1,B.b2
FROM A,B
WHERE A.a1 >= B.b1
AND A.a1 <= B.b2;

Вот загрузка вашего примера кода:

use junk
DROP TABLE IF EXISTS A;
DROP TABLE IF EXISTS B;
CREATE TABLE A (a1 int);
CREATE TABLE B (b1 int,b2 int);
INSERT INTO A VALUES (123),(451),(199),(0),(23);
INSERT INTO B VALUES ( 12, 24),(450,455),(202,210),(499,567),(  5, 40);
SELECT * FROM A;
SELECT * FROM B;
SELECT A.a1,B.b1,B.b2
FROM A,B
WHERE A.a1 >= B.b1
AND A.a1 <= B.b2;

Вот результаты:

mysql> use junk
Database changed
mysql> DROP TABLE IF EXISTS A;
Query OK, 0 rows affected (0.03 sec)

mysql> DROP TABLE IF EXISTS B;
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE A (a1 int);
Query OK, 0 rows affected (0.08 sec)

mysql> CREATE TABLE B (b1 int,b2 int);
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO A VALUES (123),(451),(199),(0),(23);
Query OK, 5 rows affected (0.05 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> INSERT INTO B VALUES ( 12, 24),(450,455),(202,210),(499,567),(  5, 40);
Query OK, 5 rows affected (0.06 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM A;
+------+
| a1   |
+------+
|  123 |
|  451 |
|  199 |
|    0 |
|   23 |
+------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM B;
+------+------+
| b1   | b2   |
+------+------+
|   12 |   24 |
|  450 |  455 |
|  202 |  210 |
|  499 |  567 |
|    5 |   40 |
+------+------+
5 rows in set (0.00 sec)

mysql> SELECT A.a1,B.b1,B.b2
    -> FROM A,B
    -> WHERE A.a1 >= B.b1
    -> AND A.a1 <= B.b2;
+------+------+------+
| a1   | b1   | b2   |
+------+------+------+
|   23 |   12 |   24 |
|  451 |  450 |  455 |
|   23 |    5 |   40 |
+------+------+------+
3 rows in set (0.00 sec)
0 голосов
/ 16 ноября 2011

Попробуйте это:

SELECT a.A1, b.B1, b.B2 
FROM `Table A` a
    INNER JOIN `Table B` b ON b.B1 < a.A1 AND b.B2 > a.A1
0 голосов
/ 16 ноября 2011
SELECT
A.VALUE,
B.VAL_MIN,
B.VAL_MAX
FROM
TAB A,
TAB B
WHERE
A.VALUE >= B.VAL_MIN AND A.VALUE <= B.VAL_MAX

Попробуйте это.

0 голосов
/ 16 ноября 2011
SELECT
    A.A1,
    B.B1,
    B.B2
FROM
    A
INNER JOIN B ON
    B.B1 <= A.A1 AND
    B.B2 >= A.A1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...