sql - 显示满足子记录条件的父记录
问题描述
在 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 的开发人员列表的任何想法?
解决方案
一种方法是:
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
);
推荐阅读
- r - Gpu processing R(如何使用 Gpu 处理在数据集的子集上运行函数)
- javascript - 如何使用户名也出现在另一个用户处?
- openapi - 如何使用两个模式对象定义响应
- php - 如何使用 nginx 反向代理 ssh 到我的远程 docker 容器
- java - 如何在Java中检查100位整数是否为素数?
- scala - Scala 中的延续单子与 Traversables/Observables/Future 有什么联系?
- xcode - 更改 Xcode 项目名称后的错误消息
- react-native - 反应本机 弯入弯出 视图右侧
- android - 工具栏和数据绑定
- javascript - How to apply the styles described in the string from the function in react?