2016-03-21 7 views
0

Ich habe zwei Tabellen namens report_instance und report_history (report_instance hat viele report_history). Ich möchte jeder report_instance die ersten 10 Datensätze von report_history hinzufügen.Wie wird jeder Datensatz von Tabelle 1 mit wenigen Datensätzen in Tabelle 2 verknüpft?

Beispiel:

report_instance r1 has 20 report_history 
report_instance r2 has 5 report_history 

Die Abfrage soll mir gibt das Ergebnis r1 Verbindung mit ersten 10 Datensätze von 20 report_history und r2 mit 5 report_history.

Meine Suche:

select * 
from report_instances ri, report_history rh 
where ri.id in (select rhh.id 
       from report_history 
       where rhh.report_instance_id=ri.id limit 10); 

ich den Fehler bekam:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

+0

Warum ist diese Frage mit sqlserver markiert, wenn Ihre Fehlermeldung von MySQL stammt? – Bohemian

+0

bedeutet, Sie wollen nur die ersten 10 report_history jedes report_intance ... ist es .. –

+0

@ZafarMalik yeah –

Antwort

0

Versuchen unten Abfrage erhalten,

SELECT TOP 10 {column-name} FROM {Table-name}; 

Verwenden Ihr Beispiel unten

select * 
from report_instances ri, report_history rh 
where ri.id in (select TOP 10 rh.id 
    from report_history 
    where rh.report_instance_id=ri.id); 

Oder

select * 
from report_instances ri, report_history rh 
where ri.id in (select rh.id 
    from report_history 
    where rh.report_instance_id=ri.id 
    order by rh.id desc limit 0,10); 

Sie haben keine Fehler mir sagen.

+0

Ich bekomme ERROR 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax entspricht, um in der Nähe '10 rhh.id von report_history zu verwenden, wo rhh.report_instance_id = ri.id Auftrag nach Bericht 'um Zeile 1 –

+0

Sie check in welche Abfrage dort? –

+0

Die zweite und dritte Abfrage löst einen Syntaxfehler aus. –

0

Sie Variablen verwenden können, wie folgt, um die neuesten-per-report_instance_id Datensätze zu erhalten:

select *, 
     @rn := IF(@id = report_instance_id, @rn + 1, 
       IF(@id := report_instance_id, 1, 1)) AS rn 
from report_history 
cross join (select @rn := 0, @id := 0) as vars 
order by report_instance_id, id desc 

können Sie die obige Abfrage verwenden als eine abgeleitete Tabelle zu report_instances Tabelle verknüpft:

select ri.*, rhd.* 
from report_instances as ri 
join (
    select *, 
      @rn := IF(@id = report_instance_id, @rn + 1, 
        IF(@id := report_instance_id, 1, 1)) AS rn 
    from report_history 
    cross join (select @rn := 0, @id := 0) as vars 
    order by report_instance_id, id desc 
) as rhd on ri.id = rhd.report_instance_id 
where rhd.rn <= 10 
Verwandte Themen