为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 SQL 中为多个输入获取相应的数据,因为 IN 子句返回所有可能的记录而不是相应的记录

如何在 SQL 中为多个输入获取相应的数据,因为 IN 子句返回所有可能的记录而不是相应的记录

喵喔喔 2022-06-30 10:58:07
考虑这种情况。表结构:(示例)Id  grpnumber  subject  mark1.  101.            Eng.       881.  101.            math.     932.   102.           Eng.        762.   102.           Math.     83和查询:Select *from Recordswhere studentId IN (1,2) AND      grpumber IN (101,102) AND      subject IN('eng','math').上面的查询返回四行,因为它返回两个学生的两个科目的分数,但我需要第一个(id = 1)学生的英语科目标记和第二个学生(id = 2)的数学标记。如何为此编写查询。PS:我在准备好的语句中动态传递了这些输入(n 个输入)。
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

如果我了解您的问题,我相信您正在寻找的是参数化您的查询。这是一个可能的解决方案。由于我没有任何 DDL 或数据,因此我提供了自己的。我看到的表。


  CREATE TABLE sample (

    id          NUMBER,

    grpnumber   NUMBER,

    subject     VARCHAR2(255),

    mark        NUMBER

);

表中的数据。


REM INSERTING into SAMPLE

SET DEFINE OFF;

Insert into SAMPLE (ID,GRPNUMBER,SUBJECT,MARK) values (1,101,'Eng',88);

Insert into SAMPLE (ID,GRPNUMBER,SUBJECT,MARK) values (1,101,'Math',93);

Insert into SAMPLE (ID,GRPNUMBER,SUBJECT,MARK) values (2,102,'Eng',76);

Insert into SAMPLE (ID,GRPNUMBER,SUBJECT,MARK) values (2,102,'Math',83);

使用绑定变量的潜在查询


SELECT

    id studentid,

    grpnumber,

    lower(subject) subject,

    mark

FROM

    sample s

WHERE (s.id = :id1  AND lower(subject) = 'eng') OR

      (s.id = :id2 AND lower(subject)  = 'math')

提供给绑定变量的值是 .


:id2 = 1

:id1 = 2

结果:


"STUDENTID" "GRPNUMBER" "SUBJECT"   "MARK"

       1      101        "math"       93

       2      102         "eng"       76


查看完整回答
反对 回复 2022-06-30
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

基本上查询看起来像这样

where (studentId = 1 AND subject = 'eng') OR
      (studentId = 2 AND subject = 'math')

如何使这种动态真正取决于应该动态的内容和方式......


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号