【发布时间】:2014-10-17 17:41:52
【问题描述】:
我有一个 DB2 数据库,其中包含表和动物之间的关系。有两张桌子,猴子和鹦鹉。 猴子长这样:
CREATE TYPE MonkeyType UNDER AnimalType AS
(
chimp CHAR(1)
)
MODE DB2SQL
OVERRIDING METHOD food() RETURNS VARCHAR(10),
OVERRIDING METHOD intelligence() RETURNS INT
@
鹦鹉长这样:
CREATE TYPE ParrotType UNDER AnimalType AS
(
numcolors INT
)
MODE DB2SQL
OVERRIDING METHOD food() RETURNS VARCHAR(10),
OVERRIDING METHOD intelligence() RETURNS INT
@
动物长这样:
CREATE TYPE AnimalType AS
(
name VARCHAR(10),
birthyear INT
)
INSTANTIABLE
MODE DB2SQL
METHOD food() RETURNS VARCHAR(10),
METHOD intelligence() RETURNS INT
@
表的 DDL:
CREATE TABLE Animal OF AnimalType
(REF IS Oid user GENERATED)@
CREATE TABLE Monkey OF MonkeyType UNDER Animal
INHERIT SELECT PRIVILEGES@
CREATE TABLE Parrot OF ParrotType UNDER Animal
INHERIT SELECT PRIVILEGES@
每种动物都有自己最喜欢的食物,猴子有香蕉,鹦鹉有种子。
我需要一个查询来找出鹦鹉和猴子最常吃的食物。这与询问哪张桌子的行数最多(鹦鹉或猴子)并返回最大桌子最喜欢的食物是一样的。
我试过查询:
SELECT *
FROM (SELECT COUNT(*) AS monkey_count FROM Monkey),
(SELECT COUNT(*) AS parrot_count FROM Parrot)
这给了我:
MONKEY_COUNT PARROT_COUNT
------------ ------------
5 2
但我不知道如何使用此信息来创建完整的查询。
【问题讨论】:
-
“这与询问哪个表的行数最多相同” -- 不,我认为不是。无论如何,到目前为止你尝试过什么?
-
这些不是表,它们是用户定义的类型,我假设你理解
udt标签。但是如果没有使用这些类型的表的 DDL,您将不会得到任何答案。 -
@mustaccio 我已经编辑了我的问题。
-
@IanBjorhovde 我已经为表格添加了 DDL。
标签: sql db2 user-defined-types