2

私は2つのテーブルを持っています。一番左のテーブルのレコードに対して、右のテーブルの 1 つのレコード (最初に一致したレコード) のみが返されるように、それらを結合したいと考えています。2 つのテーブルには 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       |
      -----------------------------------------------

これは join を使用して可能ですか? 私は他のアイデアを受け入れます

4

4 に答える 4

3

だけでこれを行うことはできませんjoin。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
             );
于 2016-08-07T03:27:41.290 に答える
2

これらは常に楽しいものであり、問​​題は一般にグループごとの最大値と呼ばれ、 dev.mysql.comで詳細を読むこともできます。

1 つのアプローチは、次のような派生テーブルを使用することです。

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)

これは、チケット テーブルに対応する行が見つかったevent_idかどうかかかわらず、それぞれに対して 1 つの結果を返すことに注意してください。対照的に、Gordon Linoff の回答は、少なくとも 1 つの対応するチケットを持つイベントのみを返します。

于 2016-08-07T08:23:05.110 に答える
0

または、より遅く、結合のみを使用

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
于 2016-08-07T07:26:53.803 に答える
-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
于 2016-08-07T03:31:43.510 に答える