如果它不包含特定类型,我正在尝试查询只返回 这个案例是浪漫小说。类型数据被插入为Genre_Type的VARRAY,其仅包含“类型”属性。以下是插入示例数据的方式。
INSERT INTO Book_Table
VALUES(1, 'Assassin's Quest', 'A young boy is trained by his King to do his bidding',
(Genre_Type(Genre_Book('Adventure'), Genre_Book('Drama'),
Genre_Book('Fantasy'))))
以下查询返回NO ROWS SELECTED因为我认为如果另一本书籍作为其中一个类型的“浪漫”,它将不会返回任何内容。
SELECT Title
FROM Book_Table
WHERE NOT EXISTS
(SELECT g.*
FROM Book_Table k, table(k.BookGenre) g
WHERE g.Genre = 'Romance')
我如何解决这个问题?提前致谢。
答案 0 :(得分:0)
Book_Table
是否有ID?
你能尝试这样的查询:
SELECT bt1.Title
FROM Book_Table bt1
WHERE NOT EXISTS
(SELECT g.*
FROM Book_Table k, table(k.BookGenre) g
WHERE g.Genre = 'Romance' and k.id = bt1.id)
答案 1 :(得分:0)
为了完整性:这是like your previous question,因为在嵌套表上选择VARRAY会让你变成笨重的语法。使用嵌套表,您可以使用更优雅的NOT MEMBER OF。
SQL> select *
2 from game_table g
3 where theme_game('FPS') not member of g.gametheme;
TITLE GAMETHEME(THEME)
-------------------- -----------------------------------------
Uncharted 3 THEME_TYPE(THEME_GAME('Action'), THEME_GAME('Puzzle'))
Commander Cody THEME_TYPE(THEME_GAME('Fun'), THEME_GAME('Puzzle'))
SQL> select *
2 from game_table g
3 where theme_game('Puzzle') not member of g.gametheme;
TITLE GAMETHEME(THEME)
-------------------- -----------------------------------------
Star Wars THEME_TYPE(THEME_GAME('Action'), THEME_GAME('FPS'))
SQL>
VARRAY相对于嵌套表的唯一优势是可以保证VARRAY的顺序:添加到VA的第一个元素将始终具有VA(1)
的索引,第n个元素将始终具有索引VA(n)
。除非您需要这种排序功能,否则增加的灵活性和对其他运算符的支持使嵌套表成为更好的选择。