mysql - 当表有键值对时如何在sql查询中使用IN

标签 mysql database

我正在处理一个具有键值对的查询

学生

StdId StuName   phnNum 
1     John       87678

学生元数据

S.NO field_name   field_value     StdId  
1    college       St.Anns         1       
2    Address      Arizona          1       
3    IdNum         321             1       
4    Subject         Maths         1        
5    Marks          90             1
6   Subject        Physics         1
7   Marks          80              1

我想从student_meta_data表中获取数据,为此我编写了如下查询,

select 
   case when student_meta_data.field_name = 'Subject' Then field_value end as subject
   case when student_meta_data.field_name ='Marks' Then field_value end as marks
   case when student_meta_data.field_name = 'IdNum' Then field_value end as IdNum
 from student_meta_data

 where student_meta_data.StdId=1
       && student_meta_data.field_name in ('Subject')

对于上述查询,我​​正在获取如下所示的记录,

subject   marks     IdNum
null      null      null

我希望获取如下所示的记录,

subject   marks     IdNum    
Maths      90        321       
Physics    80        321       

你能对此提出建议吗?提前致谢。

最佳答案

SQL DEMO

SELECT rn, 
       MAX(subject) as subject, 
       MAX(case when field_name = 'Marks' Then field_value end) as marks,
       MAX(idNum) as idNum

FROM ( SELECT m.*,
              @idNum := if(`field_name` = 'IdNum', `field_value`, @idNum) as idNum,
              @subject := if(`field_name` = 'Subject', `field_value`, @subject) as subject,
              @rn := if (@s = @subject, 
                         @rn,
                         if(@s := @subject, @rn+1, @rn+1)
                        ) as rn
       FROM student_meta_data m
       CROSS JOIN (SELECT @idNum := 0, @rn := 0, @subject := '', @s := '' ) as var
       ORDER BY `SNO` ) as T
WHERE rn > 0       
GROUP BY rn;  

输出

使用变量来跟踪 idNum 并为每个主题创建组。第一个查询只是调试建议的内部子查询,最后一个查询是您想要的结果

enter image description here

关于mysql - 当表有键值对时如何在sql查询中使用IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039971/

相关文章:

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - 从数组中查找与 cookie 不匹配的值

mysql - 如何嵌套两个 count() 语句?

MySQL架构。当多个用户拥有一个本地数据库并且都同步到一个云数据库时

python - 在多处理代码中使用 pyodbc

java - JDBC、MySQL : getting back row data from PreparedStatement executes

php - 自动填充外键行

php - 如何根据 MySQL 和 PHP 中显示的行更新值

database - 为什么循环中的 Entity Framework Core 调用会抛出 InvalidOperationException?

mysql - 获取重复记录最多的X行