SQL数据库-第一个操作数

SQL数据库-第一个操作数,sql,database,Sql,Database,以下是我的数据库关系: 节目(showID、标题、首映年份、网络、创作者、类别) 插曲(showID,eposodeid,airdate,title) showID是显示的外键 参与者(actID、fname、lname) 主要演员阵容(showID、actID、role) showID是shows actID的外键,actID是actor的外键 循环演员阵容(showID、eposodeid、actID、role) showID是shows eposodeid的外键,它是eposide

以下是我的数据库关系:

节目(showID、标题、首映年份、网络、创作者、类别)

插曲(showID,eposodeid,airdate,title)

  • showID是显示的外键
参与者(actID、fname、lname)

主要演员阵容(showID、actID、role)

  • showID是shows actID的外键,actID是actor的外键
循环演员阵容(showID、eposodeid、actID、role)

showID是shows eposodeid的外键,它是eposide的外键

  • actID是actor的外键
客户(客户ID、fname、lname、电子邮件、信用卡、会员自、续订日期、密码、用户名)

客户队列(客户ID、显示ID、日期队列)

  • custID是客户showID的外键
监视(custID、showID、EPIODEID、DATEWATED)

  • custID是客户的外键
  • showID是显示的外键
  • (showID,eposodeid)是该集的外键
  • (custID,showID)是cust_队列的外键
所有的“ID”都是主键 有人向我提出了一些疑问,对一些人来说,我不知道该怎么办。例如:

对于每个客户(显示名字和姓氏),显示哪个节目和插曲是该客户观看的第一个节目和插曲。按客户的姓氏对结果进行排序

我正在努力:

{
SELECT FIRST (Watched.datewatched)
FROM Watched
WHERE Watched.datewatched

IN

(SELECT Customer.fname, Customer.lname, Shows.title, Episode.title 
FROM Customer, Shows, Episode, Watched
WHERE Shows.showid = Episode.showID AND Watched.custID = Customer.custID AND Watched.showID = Shows.showid
ORDER BY Watched.datewatched);
}

但我认为这是不对的。有什么想法吗??我认为我不知道如何使用“FIRST”操作数。

因为您没有给出平台,所以我将使用适用于大多数(所有)SQL平台的代码:

下面是如何解决这样一个问题的步骤。首先,我们想知道用户观看的第一个节目和插曲

查找用户观看的第一个节目

select custID, showID, min(datewatched)
from watched
group by custID, showID
现在开始该节目的第一集

select firstshow.custID, firstshow.showID, firstshow.datewatched, minDW, mineID
from ( 
  select custID, showID, min(datewatched) as minDW
  from watched
  group by custID, showID
) as firstshow
join 
(
  select custID, showID, datewatched, min(episodeID) as mineID
  from watched
  group by custID, showID, datewatched
) as firstepisode on firstshow.custID = firstepisode.custID 
                 and firstshow.showID = firstepisode.showID
                 and firstshow.minDW = firstepisode.datewatched
现在返回以获取用户名和显示名称

select customer.fname, customer.lname, shows.Title as show, mineID as EpisodeNum
from ( 
  select custID, showID, min(datewatched) as minDW
  from watched
  group by custID, showID
) as firstshow
join 
(
  select custID, showID, datewatched, min(episodeID) as mineID
  from watched
  group by custID, showID, datewatched
) as firstepisode on firstshow.custID = firstepisode.custID 
                 and firstshow.showID = firstepisode.showID
                 and firstshow.minDW = firstepisode.datewatched
join customer on firstshow.custID = customer.custID
join shows on firstshow.showID = shows.showID
order by customer.lname

即使是像这样复杂的事情,如果你循序渐进,也会变得简单。

为什么这个标签是php?而且它缺少正确的数据库标记-oracle、sql server等。没有第一个操作数!这就是为什么你不知道如何使用它。那么我如何让客户观看第一个节目呢?使用分组。在sql中,您必须将集合看作函数。这有助于您理解代码的第二部分,“firstshow”从何而来?firstshow是答案第一部分中解释的子查询的别名。您可以将其视为使用select语句定义表。@BrettSaguid-除非您使用的是db2、oracle或sql server,并且可以使用
OVER()
语句,否则必须使用子查询来解决此问题。不过,如果你能使用的话,这是非常简单的。对不起,我对SQL非常陌生,但是你在哪里定义代码的第一部分为“firstshow”?()中的内容-你应该阅读SQL基础知识,我不能在注释中教你SQL