簡體   English   中英

SQL查詢語句表聯接

[英]SQL query statement table joins

我有一個SQL查詢問題,返回的結果集不是我所期望的。

我有我要聯系的這三個表。

events_detail

 __________________
| ID | start_date |
| 1  | 2012-08-09 |
| 2  | 2013-02-13 |
| 3  | 2012-12-12 |
| 4  | 2013-01-21 |
| 5  | 2012-12-25 |
-------------------

其中ID是主鍵

events_category_relationship

__________________________    
| ID | event_id | cat_id |
| 1  |     1    |    1   |
| 2  |     2    |    4   |
| 3  |     3    |    2   |
| 4  |     4    |    2   |
| 5  |     5    |    3   |
--------------------------

ID是主鍵

events_category_detail

 __________________________________
| ID | name   | description        | 
| 1  | Europe | Kings and castles! |
| 2  | USA    | Freedoms           |
| 3  | China  | Made in China      |
| 4  | UK     | Big Brother        |
------------------------------------

ID是主鍵

我需要做的是從每個類別中僅抓取1個事件,並按最早出現的日期進行排序。 所以我期望的結果如下

結果集

________________________________________________________________
| e_id | start_date | c_id | category_name | category_desc      |
|   1  | 2012-08-09 |   1  |     Europe    | Kings and castles! |
|   3  | 2012-12-12 |   2  |     USA       | Freedoms           |
|   5  | 2012-12-25 |   3  |     China     | Made in China      |
|   2  | 2013-02-13 |   4  |     UK        | Big Brother        |
-----------------------------------------------------------------

我嘗試過的SQL查詢如下所示

SELECT e.id, e.start_date, c.category_name, c.category_desc
FROM events_detail e
JOIN events_category_relationship r ON r.event_id = e.id
JOIN events_category_detail c ON c.id = r.cat_id
ORDER BY date(e.start_date)

這僅連接3個表並按日期順序返回結果。 我堅持要做的是使每個類別中只有一個像上面想要的結果集那樣顯示。 我嘗試使用DISTINCT c.category_name和GROUP BY c.category_name,但是它們都不起作用。

任何幫助或建議,將不勝感激。

您將需要使用子查詢來獲取每個namedescriptionmin(start_date) 然后,您將使用此結果events_details回您的events_details表,以獲取與子查詢中的數據關聯的id

SELECT e.id, 
  d.start_date, 
  d.name, 
  d.description
FROM events_detail e
INNER JOIN
(
  select min(e.start_date) Start_date, 
    c.name, 
    c.description
  from events_detail e
  INNER JOIN events_category_relationship r 
    ON r.event_id = e.id
  INNER JOIN events_category_detail c 
    ON c.id = r.cat_id
  group by c.name, c.description
)  d
  on e.start_date = d.Start_date
ORDER BY date(e.start_date)

參見帶有演示的SQL Fiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM