我想使用查询获取表的单行列中可用的多个数据如何做到这一点?

问题描述 投票:-4回答:1

我有一个名为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

php database
1个回答
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')
© www.soinside.com 2019 - 2024. All rights reserved.