2016-05-18 3 views
2

Ich habe gerade auf MySQL 5.7 aktualisiert und leider für mich ist ein Teil der Funktionalität von GROUP BY weg. Ich wollte alle Filme aus meiner movies Tabelle auswählen, solange die movies.id des Typs int kein Duplikat ist. Meine vorherige Abfrage in MySQL 5.6 war:MySQL 5.7 zurück alle Spalten der Tabelle basierend auf separaten Spalte

SELECT * 
FROM movies 
WHERE movies.title LIKE '%example%' 
GROUP BY movies.id 

Wenn ich mit der gleichen ID zwei Filme hatte, wäre es nur einen Film angezeigt werden, anstelle von diesem Film und seinen Duplikaten.

Wenn ich auf MySQL 5.7 aktualisiert habe, gab mir die GROUP BY Fehler und ich wurde stattdessen aufgefordert, ORDER BY zu verwenden. Aber diese Abfrage:

SELECT * 
FROM movies 
WHERE movies.title LIKE '%example%' 
ORDER BY movies.id 

Gibt doppelte Filme zurück. Also, gibt es eine Möglichkeit, dies herauszufiltern, und nur eine Zeile zurückgeben, wenn es kein Duplikat ist?

Edit: Zum Beispiel, wenn dies ist meine movies Tabelle:

movies 
================== 
| id | title | 
================== 
| 1 | example | 
------------------ 
| 2 | example | 
------------------ 
| 1 | example | 
------------------ 

Hier ist der Ausgang jeder Abfrage:

Previous query result (with MySQL 5.6) 
======= 
1 | example 
2 | example 

New query result (with MySQL 5.7 and ORDER BY) 
======= 
1 | example 
1 | example 
2 | example 

ich das Endergebnis will keine Duplikate enthält (so das Ergebnis sollte wie das erste Abfrageergebnis aussehen).

Edit 2: Ich verstehe, dass ich irgendwie die Art missbrauchte, wie MySQL GROUP BY gehandhabt hat. Leider habe ich nicht viel Erfahrung mit MySQL und habe diese Antwort von StackOverflow bekommen. Ich möchte nur alle Spalten in meiner Tabelle zurückgeben, die keine doppelten id s enthalten.

+0

zu verwenden Warum haben Sie doppelte Filme? Wenn Sie keinen PRIMÄREN SCHLÜSSEL haben, haben Sie, soweit es das RDBMS betrifft, keine Tabelle. – Strawberry

+0

@Strawberry Dies ist für eine Aufgabe in der Schule. Uns wurden absichtlich schlechte Daten für den Auftrag gegeben. : | Leider liegt es an uns, nicht duplizierte Zeilen zurückzugeben. Alles funktionierte gut bis 5.7 .. aber ich kann nicht downgrade, weil ich einige der neueren Funktionen brauche, die es zur Verfügung stellt. – Alex

+1

GROUP BY soll mit Aggregatfunktionen arbeiten. SELECT DISTINCT ist für den Fall vorgesehen, dass keine Aggregation erforderlich ist. – Strawberry

Antwort

0

Ich glaube, wäre leicht distinct Stichwort

SELECT distinct movies.* 
FROM movies 
WHERE movies.title = 'example' 
Verwandte Themen