2016-08-07 4 views
1

私は2つのテーブルを持っています。私は、一番左のテーブルのレコードに対して、右のテーブルの1つのレコード(最初に一致したレコード)のみが返されるように、それらのレコードに結合したいと思います。 2つのテーブルには1対多の関係があります。mysql joinを使用して一番右のテーブルから1行だけを返す方法

イベント表:

 ------------------------------------------------------------- 
     | 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 | 
     -------------------------------------------------------------- 

チケットテーブル:

 ----------------------------------------------- 
     |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  | 
     ----------------------------------------------- 

が参加使って、この可能です、ここで以下の表はありますか?私は他のアイデアにも開放しています

+0

チケットテーブルからどのレコードを特定することができますか? – 1000111

答えて

2

joinでこれを行うことはできません。これらは常に楽しいですし、問題は、一般的に呼ばれている

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

本当にありがとう、それは私のために働いた!!!!!!!!!!!!! –

-1

これが可能である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

または、遅く:ここでは一つの方法でありますgroup-wise maximumとなります。詳しくはdev.mysql.comをご覧ください。

一つのアプローチは、このように誘導されたテーブルを使用することである:対応する行がチケット表に見られる任意かどうか、これが各event_idに対して単一の結果を返す

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) 

留意されたいです。対照的に、Gordon Linoffの答えは、少なくとも1つの対応するチケットを持つイベントのみを返します。

1

参加のみ使用し、使用して

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 
      ); 
関連する問題