können Sie OR
nicht direkt nach einem =
Test setzen. Wenn Sie eine einzelne Spalte mit mehreren Werten testen möchten, müssen Sie den Test wiederholen, z.
stream = 'ms' OR stream = 'mba'
In SQL gibt es eine Abkürzung für diese:
stream IN ('ms', 'mba')
Allerdings wird dies für Ihr Design nicht funktionieren, weil Sie eine durch Kommata getrennte Liste haben. Um auf Mitgliedschaft zu testen, müssen Sie FIND_IN_SET()
verwenden, und es gibt keine Verknüpfung für mehrere Tests.
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))
Siehe Query with multiple values in a column
Stellen Sie sicher, parenthese um jeden OR
Ausdruck setzen, wenn sie mit AND
gemischt sind. Siehe SQL statement is ignoring where parameter
Es wäre viel besser, wenn Sie die Daten normalisierten, anstatt kommagetrennte Listen zu verwenden. Sie sollten eine university_stream
Tabelle mit Zeilen wie haben:
university_name stream
pune university ms
pune university mba
Acadia University ms
Acadia University mba
und eine university_entrance
Tabelle mit Zeilen wie:
university_name exam
pune university GMAT
pune university MS
Acadia University GMAT
Acadia University MS
Dann würden die Tabellen beitreten:
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')
Es ist schlechtes Design zu setzen durch Kommas getrennte Listen in Datenbankspalten. Sie sollten Ihre Daten normalisieren. – Barmar
warum trennen sie stream nicht in ihre eigene tabelle – JoshKisb