Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从另一个表中选择max_Sql_Database_Foxpro - Fatal编程技术网

Sql 从另一个表中选择max

Sql 从另一个表中选择max,sql,database,foxpro,Sql,Database,Foxpro,我需要一些数据库方面的帮助,在学校我们必须使用Fox Pro,我知道它很旧,但我能做什么,其中一项任务是:列出每位老师最长的课程 我们的桌子是空的 课程->idc主键、id、名称、长度 教师->id主键,名称 使用select命令有没有办法做到这一点?我相信最终教师会有两个专栏。name和courses.name。。。我的意思是,老师必须是独一无二的,旁边有一个最大的课程,但只有他/她所教的课程 我试过: 1从教师、教师所在的课程中选择教师。名称、课程。名称、MAXcourses.legth。i

我需要一些数据库方面的帮助,在学校我们必须使用Fox Pro,我知道它很旧,但我能做什么,其中一项任务是:列出每位老师最长的课程

我们的桌子是空的

课程->idc主键、id、名称、长度

教师->id主键,名称

使用select命令有没有办法做到这一点?我相信最终教师会有两个专栏。name和courses.name。。。我的意思是,老师必须是独一无二的,旁边有一个最大的课程,但只有他/她所教的课程

我试过:

1从教师、教师所在的课程中选择教师。名称、课程。名称、MAXcourses.legth。id=courses.id-->错误

2从教师、课程所在的课程中选择教师。名称、课程。名称。长度=从课程和课程中选择MAXcourses.length。id=教师。id-->仅显示最长的课程

3制作一个类似以下内容的程序:

BOF()
i=1
CALCULATE MAX(teachers.id) TO y
DO WHILE i<y
    IF teachers.id=i
        x=SELECT MAX(courses.legth) FROM courses,teachers WHERE teachers.id=i
        LIST teachers.name,courses.name FOR courses.legth=x
        SKIP
        i=i+1
     ENDIF
ENDDO
-->那一个永远没有结果

过了一段时间,我终于想办法解决这个问题,但我确信一定有更好的办法:

i=1
USE teachers
CALCULATE MAX(id) TO y
USE
DO WHILE i<=y
    USE courses
    CALCULATE MAX(length) FOR id=i TO x
    USE
    USE teachers
    LIST name for id=i
    USE
    USE courses
    LIST name for id=i AND length=x
    USE
    i=i+1
ENDDO

谢谢。

是的,其他人给了你一段艰难的时光,但现在你知道要展示你为解决问题认真尝试过的东西了。虽然没有一个对你有用,但我会尽力帮助你,边走边解释

首先,单独从课程表开始,因为它有我们可以处理的教师ID。这是一个简单的GROUPBY子句

select ;
      c.id, ;
      max( c.length ) as CourseMaxLen ;
   from ;
      courses c ;
   group by ;
      c.id ;
   into ;
      cursor C_MaxCoursePerTeacher
然后,您可以浏览此结果以查看。现在,你有一个非常简单的查询每个老师。然后,您可以以此为基础连接到教师表以获取教师姓名。然后根据教师和课程长度再次连接回原始课程表。但是,如果您的老师有多个相同长度的课程,则会返回每个相同长度的课程

select
      CMax.ID, ;
      T.Name as TeacherName, ;
      c2.Name as CourseName,;
      c2.Length ;
   from ;
      ( select ;
             c.id, ;
             max( c.length ) as CourseMaxLen ;
          from ;
             courses c ;
          group by ;
             c.id ) CMax ;
         JOIN Teachers t ;
            on CMax.ID = t.id ;
         JOIN Courses c2 ;
            on CMax.ID = c2.ID ;
            AND CMax.CourseMaxLen = c2.Length
请注意,与课程c2的连接由教师ID和内部查询确定的最大长度决定。试着一次一个地解决你的难题,然后根据需要混合在一起

在VFP中为您提供的附加选项。。。在学习过程中,构建片段并将其查询到临时游标中,以便用于下一步。工作示例也可以像使用原始查询一样完成

INTO CURSOR 
   C_MaxCoursePerTeacher
然后使用它作为连接,例如

select
      CMax.ID, ;
      T.Name as TeacherName, ;
      c2.Name as CourseName,;
      c2.Length ;
   from ;
      C_MaxCoursePerTeacher CMax ;
         JOIN Teachers t ;
            on CMax.ID = t.id ;
         JOIN Courses c2 ;
            on CMax.ID = c2.ID ;
            AND CMax.CourseMaxLen = c2.Length

这样,你就可以一次完成一个工作查询,知道它的目的是什么,然后进入下一个谜题。

尝试列出所有带长度的教师课程组合,然后列出谷歌组BY@GoatCO我不知道,因为我真的不知道。为什么这么短的问题看起来更微妙。。。无论如何,你们应该能够列出每位老师最长的课程长度,然后更新你们关于如何包括课程名称的问题。@manuell相信我,我已经考虑了好几个小时了,我想不出来。在select中,您确实可以计算出最长的课程,但当您添加另一列时,会出现错误。我曾想过制作一个.prg,但即使这样,它也相当复杂,因为我必须同时通过两个表格,通过第二个表格,teachers.id times…更新你的问题,显示你做了什么/尝试了什么。只做我的家庭作业不太可能让你得到答案,我不能太感谢你:我不知道这在FoxPro中是否有效,但它确实对我个人有帮助。@user3264023,修改后的答案,通过一件一件地做来展示另一种方法。