我有一个名为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
答案 0 :(得分:1)
您无法在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')