gpt4 book ai didi

mysql - sql中如何通过给定 super 表的主键来识别子类型表

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:57 25 4
gpt4 key购买 nike

我有 3 个表 product、CD、OtherProduct

product是super table,CD,OtherProduct是product的子类型,里面有product的主键作为外键。

Product Table
prod_num
1
2
3


CD Table
prod_num cd_title cd_length
1(fk taken by Product table) rock n roll 30


OtherProduct
prod_num size brand
3 (fk taken by product table) large nikie

我想通过sql查询产品编号,产品类型和描述来提取信息(如果产品是cd则标题,cd_length如果产品属于其他产品则尺寸,品牌)

我试过这种方式,但不正确,混淆了如何了解产品类型,然后获取该产品的详细信息。

select product.prod_num from product, cd, otherProduct
where product.prod_num = cd.prod_num

AND

product.prod_num = other_product.product_num

最佳答案

i want to extract information by sql query product numer, product type and description(if product is cd then title, cd_length and if product is belongs to other product then size, brand)

问题是关于子类型的确定 { CD | OtherProduct }, 基本类型中不存在 ProductType 列。这是一道有效的作业题。

答案需要了解什么是子类型。

  • 有两种类型的子类型:独占和非独占。

  • 这是一种专有子类型。它们需要 Basetype 中的鉴别器列,例如 ProductType。

在这种情况下,给定的问题没有鉴别器,您必须在没有鉴别器的情况下找出子类型。存在完整性问题,但同样,对于类问题,没有完整性问题并不是“不正确”。

回答

什么是数据库?

  • 数据库是事实的集合。通常,每一行都是一个事实,统称为每个表是一个事实实例的集合。

什么是独占子类型?

  • Exclusive 子类型始终是一对:Basetype 加上一个 Subtype,它永远不会单独为 Basetpe x 或 Subtype。

  • 因此,在正常(非子类型)情况下,事实存储在一个表中,子类型的事实及其存在存储在两个表中,基本类型加上一个子类型。

  • 存在性检查只是一个连接(直连接、内连接、非外连接、非左连接、非右连接)。

您可以按如下方式确定 CD Facts。一旦我们确定了它们,我们就可以断言缺少的 ProducteType:

    SELECT  CD.prod_num,
prod_type = "C",
cd_title,
cd_length
FROM Product P
JOIN CD ON P.prod_num = CD.prod_num

确定其他产品事实:

    SELECT  OP.prod_num,
prod_type = "O",
size,
brand
FROM Product P
JOIN OtherProduct OP ON P.prod_num = OP.prod_num
  • 没有空值。

  • 漂亮地缩放。

如果您在 View 中需要它们,请在它们前面粘贴 CREATE VIEW AS

如果您在单个 View 中需要两种子类型 1:

    SELECT  CD.prod_num,
prod_type = "C",
cd_title,
cd_length,
size = "",
brand = ""
FROM Product P
JOIN CD ON P.prod_num = CD.prod_num
UNION
SELECT OP.prod_num,
prod_type = "O",
"",
"",
size,
brand
FROM Product P
JOIN OtherProduct OP ON P.prod_num = OP.prod_num
  1. 请注意, View 是派生关系,而不是基本关系(表),因此我们不关心它是否具有 Null,而我们不会在基本关系中实现 Null。

  2. 尽管如此,NULL 是一个非常愚蠢的值,因为它会让用户感到困惑,所以你必须花时间消除他们的困惑。因此,最好将 NULL 替换为不会造成混淆的内容。

  3. 我在第一个 SELECT, 中给出了列标题,以便显示它们。第二个和后续 SELECT 中的列标题将被忽略。

关于mysql - sql中如何通过给定 super 表的主键来识别子类型表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30543599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com