2017-12-23 3 views
-4

Ich habe eine Tabelle in der Datenbank namens Land, die den Namen der Universität, Strom, Aufnahmeprüfung und Cutoff enthält. Ich mag die Universitäten von tabel wählen und für das ich verwende die Abfrage als,Ich möchte die mehreren Daten in einer einzelnen Zeile-Spalte der Tabelle mit Abfrage, wie dies zu tun?

SELECT university_name FROM country WHERE stream = ms AND entrance_exam = GMAT OR MS; 

i university_name aus der Tabelle will, wo Strom ms ist, wenn ich GMAT oder MS in Drop-Down wählen. Bitte lösen Sie mein Problem und sagen Sie, wie man das macht? enter image description here

+2

Es ist schlechtes Design zu setzen durch Kommas getrennte Listen in Datenbankspalten. Sie sollten Ihre Daten normalisieren. – Barmar

+0

warum trennen sie stream nicht in ihre eigene tabelle – JoshKisb

Antwort

1

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') 
+0

danke für sie hilfe sir es workss .... –

Verwandte Themen