2017-10-13 2 views
0

Ich verwende diese Abfrage für Tags ÄhnlichkeitMYSQL: Kardinalitätsverletzung: 1242 Unterabfrage gibt mehr als 1 Zeile zurück?

SELECT sites_id 
    FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
    AND sites_id!= ? 
    GROUP BY sites_id 
    HAVING COUNT(*) = ( SELECT COUNT(*) FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
     AND sites_id!= ? 
    GROUP BY sites_id 
    ORDER BY COUNT(*) DESC LIMIT 3) 

aber ich einen Fehler

SQLSTATE [21000] erhalten suchen: Cardinality Verletzung: 1242 Subquery liefert mehr als 1 Reihe

jemand weiß warum?

+0

Ihre Unterabfrage Rückkehr 3 Zeilen (von 'ORDER BY COUNT (*) DESC LIMIT 3'), und Sie haben nur 1 zurückzukehren oder Ihre' having' Aussage umschreiben zu ' HABEN ZÄHLEN (*) IN ' – SatanDmytro

+0

guten Fang! Wie beschränke ich das letzte Array auf nur 3 Ergebnisse? Shoudl Ich bewege Limit 3 außerhalb der Klammer richtig? – Francesco

+0

können Sie einige Daten aus der Tabelle hinzufügen und erklären, welche Abfrage Sie wünschen? – SatanDmytro

Antwort

0

die richtige Abfrage

SELECT sites_id 
    FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
    AND sites_id!= ? 
    GROUP BY sites_id 
    HAVING COUNT(*) = ( SELECT COUNT(*) FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
     AND sites_id!= ? 
    GROUP BY sites_id 
    ORDER BY COUNT(*) DESC LIMIT 1) 
LIMIT 3 
Verwandte Themen