簡體   English   中英

使用IN時如何只獲取一條記錄而不是獲取2條記錄

[英]How to get only one record instead of fetching 2 records when using IN

我正在使用mysql中的sql查詢,例如我正在插入像鍵和值對的記錄

學生表

StdId StuName   phnNum 
1    John   87678

我在student_metadata表中存儲有關該學生的詳細信息

S.NO FieldName   FieldValue     indexVal
1    college       St.Anns         1
2    Address      Arizona      1
3    IdNum         321             1

現在我想獲取student_metadata

SELECT 
 student.stdId AS StdId
 fieldValue AS fieldValue
FROM 
Student 
 LEFT JOIN 
 Student_metadata ON Student.StdId = student_metadata.indexVal
Where 
 Student_metadata.fieldName IN ('College','IdNum')

這里我的問題是如果我使用'IN'它給我2行。 如下所示

StudentId  fieldValue 
1       St.Anns
1           321

我想像下面這樣取

StudentId  fieldValue IdNum
1       St.Anns    321

任何人都可以在此建議我

您可以使用條件聚合來進行透視:

select 
 s.stdid,
 max(case when m.fieldname = 'College' then fieldvalue end) as fieldvalue,
 max(case when m.fieldname = 'IdNum' then fieldvalue end) as idnum
from student s
left join student_metadata m on s.stdid = m.indexval
where m.fieldname in ('College','IdNum')
group by s.stdid

您可以使用數據透視表樣式查詢:

SELECT
    a.`StuName`,
    COALESCE(b.`FieldVal`) as `college`,
    COALESCE(c.`FieldVal`) as `IdNum`
FROM `Student` a
LEFT JOIN `student_metadata` b
ON b.`indexVal` = a.`StdId` AND b.`FieldName` = 'college'
LEFT JOIN `student_metadata` c
ON c.`indexVal` = a.`StdId` AND c.`FieldName` = 'IdNum'
WHERE a.`StdId` = 1
GROUP BY a.`StdId`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM