刚接触 SQL,因此寻求帮助
我正在尝试编写一个查询,该查询将打印从 A 列开始到 B 列的值,不包括第二个表的“ANS”列中存在的值。
就像这里有两个表 X 和 Y
Table1
A FROM TO
a 6 9
b 3 6
c 0 3
d 2 3
Table2
A ANS
a 7
b 5
c 1
我希望输出为
A ANS
a 6
a 8
a 9
b 3
b 4
b 6
c 0
c 2
c 3
d 2
d 3
我试图写这样的东西,但它不起作用
WITH y(n) AS
(SELECT 1 AS n
FROM dual
UNION ALL
SELECT n + 1 AS n
FROM y, table1 T
WHERE n <= T.TO AND n>= T.FROM )
SELECT * FROM y;
打印 5000 多行(这就是我不附加输出的原因) 提前致谢
最佳答案
使用递归 cte 获取 from 和 to 之间的所有数字后,在生成的表上进行左连接,并使用 not contains
仅获取 table2 中不存在的数字。
--Get the maximum value of `to` column and generate all numbers between 0 and that value
WITH maxto(maxt) as (SELECT MAX(TO) FROM TABLE1)
,y(n) AS
(SELECT 0 AS n FROM dual
UNION ALL
SELECT n + 1 AS n FROM y WHERE n < (SELECT maxt FROM maxto))
SELECT * FROM
(SELECT t1.a, y.n
FROM y
LEFT JOIN table1 t1 on y.n between t1.from and t1.to
WHERE t1.a IS NOT NULL) x
WHERE NOT EXISTS (SELECT 1 FROM table2 WHERE x.a = a and x.n = ans)
ORDER BY 1,2
关于SQL查询打印从A列开始到B列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40178903/