在 PROGRESS 4GL 中使用 SQL 减法运算?
Using a SQL minus operation in PROGRESS 4GL?
有没有办法让 SQL 中的减号操作等同于进行中的操作?我有 2 个选择,想要第一个减去第二个。
例如,最初在 SQL 中是这样的:
select id from item
minus
select id from item-uni
我正在尝试这样做
DEF TEMP-TABLE tt-item NO-UNDO
FIELD item-id AS INT
FIELD desc AS CHAR
.
DEF TEMP-TABLE tt-item2 NO-UNDO
FIELD item-id AS INT
FIELD desc AS CHAR
.
FOR EACH item-uni
WHERE item-uni.desc = '101':
CREATE tt-item.
ASSIGN
tt-item.item-id = item-uni.item-id
tt-item.desc = item-uni.desc
.
END.
FOR EACH item:
CREATE tt-item2.
ASSIGN
tt-item2.item-id = item.item-id
tt-item2.desc = item.desc
.
END.
FOR EACH tt-item,
EACH tt-item2
WHERE tt-item.item-id = tt-item2.item-id:
DELETE tt-item.
END.
但是,当我尝试这样做时,我收到一条错误消息。有没有一种简单的方法(或至少更容易)来做到这一点?谢谢
如果我正在阅读 minus
应该做什么,即 return 外部 select 的所有行,而内部 select 上不存在任何行,那么应该这样做:
for each item
where not can-find(
item-uni
where item-uni.id = item.id
)
no-lock:
/* do something */
end.
我发帖已经有几天了,因为直到现在我才设法得到一个好的和正确的答案。我必须在 IF 子句中使用 NOT CAN-FIND 才能使其工作。
第一个 temp-table 获取我想要的值,第二个 temp-table 获取我不想要的这些值中的哪些值。第三次迭代是 NOT CAN-FIND 所在的位置,使其类似于我想使用的 'minus'。变成了这样:
IF NOT CAN-FIND (tt-item-temp2
WHERE tt-item-temp2.item-id = tt-item-temp.item-id) THEN DO:
再次感谢 Stefan。如果不是你,我找不到这个答案。
有没有办法让 SQL 中的减号操作等同于进行中的操作?我有 2 个选择,想要第一个减去第二个。 例如,最初在 SQL 中是这样的:
select id from item
minus
select id from item-uni
我正在尝试这样做
DEF TEMP-TABLE tt-item NO-UNDO
FIELD item-id AS INT
FIELD desc AS CHAR
.
DEF TEMP-TABLE tt-item2 NO-UNDO
FIELD item-id AS INT
FIELD desc AS CHAR
.
FOR EACH item-uni
WHERE item-uni.desc = '101':
CREATE tt-item.
ASSIGN
tt-item.item-id = item-uni.item-id
tt-item.desc = item-uni.desc
.
END.
FOR EACH item:
CREATE tt-item2.
ASSIGN
tt-item2.item-id = item.item-id
tt-item2.desc = item.desc
.
END.
FOR EACH tt-item,
EACH tt-item2
WHERE tt-item.item-id = tt-item2.item-id:
DELETE tt-item.
END.
但是,当我尝试这样做时,我收到一条错误消息。有没有一种简单的方法(或至少更容易)来做到这一点?谢谢
如果我正在阅读 minus
应该做什么,即 return 外部 select 的所有行,而内部 select 上不存在任何行,那么应该这样做:
for each item
where not can-find(
item-uni
where item-uni.id = item.id
)
no-lock:
/* do something */
end.
我发帖已经有几天了,因为直到现在我才设法得到一个好的和正确的答案。我必须在 IF 子句中使用 NOT CAN-FIND 才能使其工作。 第一个 temp-table 获取我想要的值,第二个 temp-table 获取我不想要的这些值中的哪些值。第三次迭代是 NOT CAN-FIND 所在的位置,使其类似于我想使用的 'minus'。变成了这样:
IF NOT CAN-FIND (tt-item-temp2
WHERE tt-item-temp2.item-id = tt-item-temp.item-id) THEN DO:
再次感谢 Stefan。如果不是你,我找不到这个答案。