【问题标题】:Out of 2 tables, get the table with the most rows in DB2在 2 个表中,获取 DB2 中行数最多的表
【发布时间】: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


【解决方案1】:
select temp.food 
from (    (select distinct Oid->food() AS food, (select count(*) from Monkey) as amount from Monkey) 
              union 
          (select distinct Oid->food() AS food, (select count(*) from Parrot) as amount from Parrot)) AS temp 
where temp.amount >= all 
                ((select count(*) from monkey) union (select count(*) from Parrot))

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2013-07-15
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多