Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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-使用Join/Having/Subquery进行查询-如何_Sql_Join_Vbscript - Fatal编程技术网

SQL-使用Join/Having/Subquery进行查询-如何

SQL-使用Join/Having/Subquery进行查询-如何,sql,join,vbscript,Sql,Join,Vbscript,请建议使用sql查询来获取 如果学生在多个科目中有相同的分数,则列出学生和学生成绩相同的相应科目 例如 审判- select person , subject where person in ( select person , score , count(score) group by person , score having count(score) > 1 ) 但在这本书中,彼得科学出现了,这不是必需的 请帮忙 谢谢您应该告诉我们您使用的是什么RDBMS。但这应该适用于所有地方:

请建议使用sql查询来获取

如果学生在多个科目中有相同的分数,则列出学生和学生成绩相同的相应科目

例如

审判-

select person , subject where person in 
( select person , score , count(score) group by person , score having count(score) > 1 )
但在这本书中,彼得科学出现了,这不是必需的

请帮忙


谢谢

您应该告诉我们您使用的是什么RDBMS。但这应该适用于所有地方:

select 
    t.*
from <tableName> t
join (
    select
        student, score
    from <tableName>
    group by 
        student, score
    having count(*)>1 
) x
on  t.student=x.student
and t.score=x.score
顺便说一句,您的查询中缺少。请尝试:

select person , subject 
from table t
  join 
     ( select person , score , count(score) 
       from table
       group by person , score having count(score) > 1 
     ) foo
       on t.person = foo.person
 where t.person = foo.person 
   and t.score = foo.score
除了不包括表之外,查询不起作用的原因: 您的内部查询是选择符合您的条件的学生和分数。但是你的外部查询是为所有符合条件的学生选择所有内容,这就是为什么彼得科学被包括在内。因此,您需要将外部查询中的结果限制为仅与所有条件匹配的结果。

尝试以下方法:

select student, subject
from Person 
where student + cast(score as varchar(20)) in 
(   
    select student + cast(score as varchar(20)) from Person group by student,score having count(score) > 1 
)

您可以通过自连接表实现此目标,如示例所示:

SELECT
  t.Student,
  t.Subject,
  t.Score
FROM Table1 AS t
  JOIN 
    (
        SELECT Student, Score FROM Table1 GROUP BY Student, Score HAVING COUNT(*) > 1
    ) AS t1 ON t.Student = t1.Student AND t.Score = t1.Score
包含测试数据和创建表的完整示例,您可以在此处找到:


你的外部查询没有FROM子句。你可以使用排名函数吗?@Meherzad-我刚刚知道我在尝试什么,这不是确切的查询。您可以查看问题陈述并提出解决方案。@ta.speot.is确实如此,您能在这方面提供帮助吗。我正在使用vbscript从acceess数据库中获取行,然后继续进行进一步的计算。只要我能得到想要的结果,任何方法都是正当的。。谢谢很快回复。只是再多一点帮助。使用vbscript连接到Access-语法中的任何修改。首先在access中试用。我不是access专家,但我认为不需要对查询的语法进行任何修改。这是标准的SQL。
SELECT
  t.Student,
  t.Subject,
  t.Score
FROM Table1 AS t
  JOIN 
    (
        SELECT Student, Score FROM Table1 GROUP BY Student, Score HAVING COUNT(*) > 1
    ) AS t1 ON t.Student = t1.Student AND t.Score = t1.Score