我有一个名为country的数据库表,其中包含大学名称,流,入学考试和截止。我想从tabel中选择大学,因为我正在使用查询,
SELECT university_name FROM country WHERE stream = ms AND entrance_exam = GMAT OR MS;
当我在下拉列表中选择GMAT或MS时,我想要来自表格中的university_name,其中stream是ms。请解决我的问题并告诉我该怎么做? enter image description here
你不能在OR
测试后把=
放好。如果要针对多个值测试单个列,则需要重复测试,例如:
stream = 'ms' OR stream = 'mba'
在SQL中有一个快捷方式:
stream IN ('ms', 'mba')
但是,这不适用于您的设计,因为您有一个以逗号分隔的列表。要测试成员身份,您需要使用FIND_IN_SET()
,并且没有多个测试的快捷方式。
SELECT university_name
FROM country
WHERE (FIND_IN_SET('ms', stream) OR FIND_IN_SET('mba', stream))
AND (FIND_IN_SET('GMAT', entrance_exam) OR FIND_IN_SET('MS', entrance_exam))
见Query with multiple values in a column
当它们与OR
混合时,确保在每个AND
表达式周围加上括号。见SQL statement is ignoring where parameter
如果您规范化数据而不是使用逗号分隔列表会更好。你应该有一个university_stream
表,其行如:
university_name stream
pune university ms
pune university mba
Acadia University ms
Acadia University mba
和一个university_entrance
表,行如:
university_name exam
pune university GMAT
pune university MS
Acadia University GMAT
Acadia University MS
然后你会加入表格:
SELECT DISTINCT a.university_name
FROM university_stream AS a
JOIN university_entrance AS b ON a.university_name = b.university_name
WHERE a.stream IN ('ms', 'mba')
AND b.exam IN ('GMAT', 'MS')