【发布时间】:2020-11-13 04:40:29
【问题描述】:
我有一个游标,我可以在其中检索数据以执行 FOR 循环。在游标的 select 语句中,我想按子表中的列排序,但是我不想从子表中获取数据。
我尝试使用连接,但子表中的数据也被提取到游标。我完全同意拥有执行订单的数据是有意义的。我不确定这是否可行,但真的很期待解决方案。
我的场景示例。
CURSOR get_items_cursor_(rev_code_ IN VARCHAR2) IS
SELECT *
FROM items_table
WHERE code = rev_code_ ;
上面是我的 FOR 循环中使用的简单光标。
上表显示了 items_table 中的示例数据
我想从子表 part_items_table 的 is_original 列中订购这些数据
上图显示了子表中的数据。
在上面的光标中,我想使用 item_id 列加入数据,并首先按 is_original TRUE 列排序。但是我不想从子表中获取数据到 CURSOR。
我已经尝试了以下
SELECT * FROM
item_table item
INNER JOIN item_part_table item_part ON item.item_id =item_part.item_id
ORDER BY item_part.is_original DESC
上面的 select 语句也显示了子表中的数据。从逻辑上讲,连接应该显示来自子表的数据,但在我的场景中,我只想使用子表列对上表进行排序。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
SELECT item.* FROM ... -
是否有可能在 ITEM_PART_TABLE 中重复 ITEM_ID,其中一个值为 IS_ORIGINAL = TRUE,而另一个值为 IS_ORIGINAL = FALSE?如果是 - 您希望看到哪个 ITEM_TABLE 值?
-
只选择您需要的列。这在使用游标时总是是正确的——尽管你是否真的需要一个游标来实现你想要实现的逻辑是值得怀疑的。
-
@gogocho item_part_table 中的 item_id 可以重复,一个 is_original 为 true,另一个为 false。我想同时显示两者,但我想先选择 true 的记录。
-
@HarryManoharan - 因此,如果您在 ITEM_ID 的 PART_ITEMS_TABLE 中有两个 IS_ORIGINAL 值,您希望在结果中两次显示 ITEM_TABLE 中的 ITEM_ID、REV_CODE、ASSM_CODE、SLOT_CODE、ITEM_CODE 的相同值?但按子表中的某些列排序。如果我们在 PART_ITEMS_TABLE 中有三倍的 ITEM_ID?预计会出现 3 次相同的结果?