2016-08-07 3 views
1

Ich habe zwei Tabellen. Ich möchte sie auf eine Weise verbinden, dass nur ein Datensatz (der erste übereinstimmende Datensatz) in der rechten Tabelle für den Datensatz in der am weitesten links liegenden Tabelle zurückgegeben wird. Die beiden Tabellen haben eine Eins-zu-viele-Beziehung. hier sind die Tabellen unter:Wie man mit mysql join nur eine Zeile aus der rechten Tabelle zurückgibt

Ereignistabelle:

 ------------------------------------------------------------- 
     | event_id | event_name |event_details|event_venue|dress_code| 
     ------------------------------------------------------------- 
     | 1  | club 92 |blah blahblah|somewhere |something | 
     | 2  | graduation |blah blahblah|somewhere |something | 
     | 3  | party  |blah blahblah|somewhere |something | 
     -------------------------------------------------------------- 

Tickets Tabelle:

 ----------------------------------------------- 
     |ticket_id | ticket_name | price | event_id | 
     ----------------------------------------------- 
     | 1  | first  | 0 | 1  | 
     | 2  | second  | 10 | 1  | 
     | 3  | third  | 100 | 1  | 
     | 4  | fourth  | 10 | 2  | 
     | 5  | fifth  | 200 | 2  | 
     ----------------------------------------------- 

ist dies möglich, indem beitreten? Ich bin für alle anderen Ideen offen

+0

Könnten Sie genauer angeben, welcher Datensatz aus der Ticket-Tabelle? – 1000111

Antwort

2

Sie können dies nicht nur mit einem join tun. Hier ist eine Methode:

select e.*, t.* 
from events e join 
    tickets t 
    on e.event_id = t.event_id 
where t.id = (select min(t2.id) 
       from tickets t2 
       where t2.event_id = t.event_id 
      ); 
+0

Vielen Dank, es hat für mich funktioniert !!!!!!!!!!!!! –

-1

Dies ist möglich, unter Verwendung von TOP 1

SELECT TOP 1 * 
FROM Events e 
INNER JOIN Tickets t 
ON e.event_id = t.event_id 
ORDER BY t.ticket_id 
0

Oder langsamer mit nur beitreten

SELECT e.*,t.* 
    FROM events e 
    JOIN tickets t 
    ON t.event_id = e.event_id 
    LEFT 
    JOIN tickets x 
    ON x.event_id = t.event_id 
    AND x.ticket_id > t.ticket_id 
WHERE x.ticket_id IS NULL 
1

Diese sind immer Spaß, und das Problem ist in der Regel bezeichnet als group-wise maximum, wo Sie auch mehr über auf dev.mysql.com lesen können.

Ein Ansatz ist es, eine abgeleitete Tabelle wie folgt zu verwenden:

SELECT * 
FROM events e 
LEFT JOIN 
(
    SELECT event_id, MIN(ticket_id) AS ticket_id 
    FROM tickets 
    GROUP BY event_id 
) t2 USING (event_id) 
LEFT JOIN tickets t USING (ticket_id) 

Beachten Sie, dass dies ein einzelnes Ergebnis für jeden event_id zurück, ob oder nicht jeden entsprechende Zeilen in der Karten-Tabelle zu finden sind. Im Gegensatz dazu gibt Gordon Linoffs Antwort nur Ereignisse zurück, die mindestens ein entsprechendes Ticket haben.

Verwandte Themen