【发布时间】:2017-09-01 12:41:36
【问题描述】:
在Contents 表中,项目存储在 X、Y 坐标中:
Contents
-------
id
parent_id
pos_x
pos_y
假设容器大小为 3 x 3。我想找出给定容器中的哪些位置是空闲的。到目前为止,我已经生成了一个二维矩阵:
SELECT *
FROM
(SELECT rownum X FROM dual CONNECT BY LEVEL <= 3 ) xaxis
INNER JOIN
(SELECT rownum Y FROM dual CONNECT BY LEVEL <=3 ORDER BY 1) yaxis
ON xaxis.X <> yaxis.Y OR xaxis.X = yaxis.Y
然后我尝试将 JOIN 查询放在一起,不包括 Contents 中存在的 X、Y 位置:
SELECT X, Y
FROM
(SELECT rownum X FROM dual CONNECT BY LEVEL <= 3 ) xaxis
INNER JOIN
(SELECT rownum Y FROM dual CONNECT BY LEVEL <=3 ORDER BY 1) yaxis
ON xaxis.X <> yaxis.Y OR xaxis.X = yaxis.Y
INNER JOIN (
SELECT pos_x, pos_y FROM Contents WHERE parent_id = ?) items
ON items.posx <> xaxis.X AND items.posy <> yaxis.Y;
这不会将每一对视为唯一的,并且如果位置已被占用,则会从 所有 行中排除值。比如假设(2, 2)被占用,上面的返回:
X Y
-----
1 1
1 3
3 1
3 3
本质上,我试图找出两组的差异。任何帮助表示赞赏。
【问题讨论】:
-
@bradimus 后端是 Java,但你是对的,它应该被删除。已编辑。谢谢
标签: oracle11g set-theory