2011-11-16 64 views
1

我在MySQL數據庫中有兩個表。在表A(A1)中的第一列數據中,我有整數值。在表B(B1和B2)的第一列和第二列中,我也有整數值。我想創建一個查詢,它可以給出A1在B1-B2範圍內的值。這可能與MySQL查詢有關嗎?如何在SQL中的表中執行範圍查詢

這裏是我想知道怎麼做一個例子:

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 
+0

哦,兩個答案是相同的,除了你沒有包括範圍是否包含。 '<'vs'<=' –

+0

是的,我認爲包容。 MySQL之間的運算符是包容性的。 – flesk

+0

只有在B1-B2內包含A1時,查詢才應返回。 (即'B1 drbunsen

回答

2
select * from a, b where a1 between b1 and b2 

就像交叉連接一樣簡單。至少在MySQL和Oracle中相當於內部連接。

+0

謝謝,這是完美的。我讓它比需要的要難得多。 – drbunsen

0
SELECT 
    A.A1, 
    B.B1, 
    B.B2 
FROM 
    A 
INNER JOIN B ON 
    B.B1 <= A.A1 AND 
    B.B2 >= A.A1 
0
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

試試這個:

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

下面是該查詢:

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)