[英]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.