首页 > 解决方案 > 显示满足子记录条件的父记录

问题描述

在 oracle sql 中,假设我有一张游戏开发者表和一张游戏商店销售的产品表。想象一下,我正在尝试仅选择游戏商店中可用产品总数少于 10 的游戏开发者。

为此,我将表称为“开发人员”和“游戏”。Developers 包含一个 DEV_ID 的 PK,它将作为游戏中 GAME_DEV 的 FK。

CREATE TABLE Developers (
DEV_ID varchar(5) NOT NULL PRIMARY KEY,
DEV_NAME varchar(20) NOT NULL);

CREATE TABLE Games (
GAME_ID varchar(5) NOT NULL PRIMARY KEY
GAME_NAME varchar(20) NOT NULL,
GAME_PRICE varcher(10) NOT NULL,
GAME_DEV varchar(5) NOT NULL,
CONSTRAINT game_fk FOREIGN KEY (GAME_DEV)
REFERENCES Developers(DEV_ID));

我尝试过创建一个视图之类的操作,然后尝试从条目数量小于 10 的视图中仅选择 DEV_ID。这是我尝试过的:

CREATE OR REPLACE VIEW games_developers AS
SELECT * FROM Games g
INNER JOIN Developer d
ON g.GAME_DEV = d.DEV_ID;

SELECT DEV_ID FROM games_developers
WHERE COUNT(DEV_NAME) < 10;

现在我收到错误消息“此处不允许使用组功能”关于如何提取商店中可用游戏数量少于 10 的开发人员列表的任何想法?

标签: sqloracle-sqldeveloperoracle18c

解决方案


一种方法是:

SELECT d.*
FROM Developer d
WHERE d.DEV_ID IN (SELECT g.GAME_DEV
                   FROM Games g
                   GROUP BY g.GAME_DEV
                   HAVING COUNT(*) < 10
                  );

但是,这将错过商店中没有游戏的开发人员。所以:

SELECT d.*
FROM Developer d
WHERE d.DEV_ID NOT IN (SELECT g.GAME_DEV
                       FROM Games g
                       GROUP BY g.GAME_DEV
                       HAVING COUNT(*) >= 10
                      );

推荐阅读