Mysql 映射中的位置
Mysql WHERE IN Mapping
我有一个Mysql查询,请检查以下内容:
SELECT `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID` ,
`tbl_classes`.`name` AS className, `tbl_sections`.`name` AS sectionName
FROM `tbl_classSubjects`
JOIN `tbl_classes` ON `tbl_classSubjects`.`classID` = `tbl_classes`.`classID`
JOIN `tbl_sections` ON `tbl_classSubjects`.`sectionID` = `tbl_sections`.`sectionID`
WHERE `tbl_classes`.`classID` IN ( 24, 24, 27, 28 )
AND tbl_sections.sectionID IN ( 19, 20, 19, 15 )
GROUP BY `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID`
ORDER BY `className` , `sectionName`
LIMIT 0 , 30
产生的结果为:
classID sectionID className sectionName
27 19 6th A
27 20 6th B
27 15 6th C
28 19 7th A
28 20 7th B
28 15 7th C
24 19 LKG A
24 20 LKG B
这是错误的。我要映射
WHERE IN ( 24, 24, 27, 28 )
AND tbl_sections.sectionID IN ( 19, 20, 19, 15 )
as 24-19, 24-20, 27-19, 28-15 所以它产生的结果为
classID sectionID className sectionName
27 19 6th A
28 15 7th C
24 19 LKG A
24 20 LKG B
您正在查询结果 WHERE
classID
是 IN
或群组 (24, 24, 27, 28) AND
的成员sectionID
是 IN
组 (19, 20, 19, 5) 的成员。
第一个table中的所有结果都符合这两个条件,这两个条件之间完全不依赖,第一组24和第二组19的重复是多余的。
根据你的描述,我假设你想要的逻辑是:
WHERE (classID = 24 AND sectionID = 19)
OR (classID = 24 AND sectionID = 20)
OR (classID = 27 AND sectionID = 19)
OR (classID = 28 AND sectionID = 5)
为了进一步证明IN
,可以这样写:
WHERE (classID = 24 AND sectionID IN (19,20))
OR (classID = 27 AND sectionID = 19)
OR (classID = 28 AND sectionID = 5)
我有一个Mysql查询,请检查以下内容:
SELECT `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID` ,
`tbl_classes`.`name` AS className, `tbl_sections`.`name` AS sectionName
FROM `tbl_classSubjects`
JOIN `tbl_classes` ON `tbl_classSubjects`.`classID` = `tbl_classes`.`classID`
JOIN `tbl_sections` ON `tbl_classSubjects`.`sectionID` = `tbl_sections`.`sectionID`
WHERE `tbl_classes`.`classID` IN ( 24, 24, 27, 28 )
AND tbl_sections.sectionID IN ( 19, 20, 19, 15 )
GROUP BY `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID`
ORDER BY `className` , `sectionName`
LIMIT 0 , 30
产生的结果为:
classID sectionID className sectionName
27 19 6th A
27 20 6th B
27 15 6th C
28 19 7th A
28 20 7th B
28 15 7th C
24 19 LKG A
24 20 LKG B
这是错误的。我要映射
WHERE IN ( 24, 24, 27, 28 )
AND tbl_sections.sectionID IN ( 19, 20, 19, 15 )
as 24-19, 24-20, 27-19, 28-15 所以它产生的结果为
classID sectionID className sectionName
27 19 6th A
28 15 7th C
24 19 LKG A
24 20 LKG B
您正在查询结果 WHERE
classID
是 IN
或群组 (24, 24, 27, 28) AND
的成员sectionID
是 IN
组 (19, 20, 19, 5) 的成员。
第一个table中的所有结果都符合这两个条件,这两个条件之间完全不依赖,第一组24和第二组19的重复是多余的。
根据你的描述,我假设你想要的逻辑是:
WHERE (classID = 24 AND sectionID = 19)
OR (classID = 24 AND sectionID = 20)
OR (classID = 27 AND sectionID = 19)
OR (classID = 28 AND sectionID = 5)
为了进一步证明IN
,可以这样写:
WHERE (classID = 24 AND sectionID IN (19,20))
OR (classID = 27 AND sectionID = 19)
OR (classID = 28 AND sectionID = 5)