2016-09-21 87 views
0

,所以我有3代表在MySQLMYSQL - 加入多個日期 - 只得到第一次從加入

事件

| ID | event_name | 
------------------- 
| 1 | test  | 
| 2 | test2 | 
| 3 | test3 | 

sp_events

| ID | event_ID | show_in_grid | 
-------------------------------- 
| 5 | 1  |  1  | 
| 6 | 2  |  1  | 

sp_event_dates

| ID | sp_event_ID |  start_date  | 
------------------------------------------ 
| 1 |  5  | 2016-10-31 14:00:00 | 
| 2 |  5  | 2016-11-01 14:00:00 | 
| 3 |  5  | 2016-11-02 14:00:00 | 
| 4 |  6  | 2016-12-01 14:00:00 | 
| 5 |  6  | 2016-12-02 14:00:00 | 

所以我試圖加入sp_event_dates表,但我只想要第一個結果,並不想每個結果重複。

的SQL我用盡是

SELECT events.*, sp_event_dates.start_date FROM events 
JOIN sp_events 
ON sp_events.event_ID=events.ID 
JOIN sp_event_dates ON sp_event_dates.sp_event_ID = 
    (SELECT dd.ID FROM sp_event_dates dd WHERE sp_events.ID = 
    dd.sp_event_ID ORDER BY dd.start_date ASC LIMIT 1) 
WHERE sp_events.show_in_grid=1; 

按預期這不起作用。我希望的結果,下面是:

| ID | event_name |  start_date  | 
----------------------------------------- 
| 1 | test  | 2016-10-31 14:00:00 | 
| 2 | test2 | 2016-12-01 14:00:00 | 

我做的最終計劃增加在起始日期where子句,但只是試圖讓這第一次合作。任何人都可以看到我做錯了什麼?

我的查詢返回任何結果目前

+0

表明您已經得到了輸出。 –

+0

你想要最早的或最近的事件日期嗎? –

+0

@Harshil這是虛擬數據,因爲我不想把我的實際數據庫信息放在這裏。我可以將其設置爲一個真正的數據庫來獲得輸出 – Neil

回答

2

只需使用一個GROUP BY + MIN:

SELECT events.id 
    ,events.event_name 
    ,min(sp_event_dates.start_date) As start_date 
FROM events 
JOIN sp_events 
ON sp_events.event_ID=events.ID 
JOIN sp_event_dates ON sp_event_dates.sp_event_ID = sp_events.ID 
WHERE sp_events.show_in_grid=1 
GROUP BY events.id 
    ,events.event_name 
+0

對不起,我已經更新了我的問題,在SELECT中包含了start_date。它是重要的,它返回最早的日期只有 – Neil

+0

謝謝,你的答案引導我在正確的方向,我得到它通過使用上述 – Neil

0

你需要groupby事件ID

SQL:

SELECT 
    events.ID, 
    events.event_name, 
    sp_event_dates.start_date 
FROM 
    `events` 
    INNER JOIN sp_events 
    ON sp_events.event_ID = events.ID 
    INNER JOIN sp_event_dates 
    ON sp_event_dates.`sp_event_ID` = sp_events.`ID` 
WHERE sp_events.show_in_grid = 1 
GROUP BY events.ID 

輸出:

ID event_name start_date   

1 test  2016-10-31 14:00:00 
2 test2  2016-12-01 14:00:00 
+0

工作這似乎並沒有爲我工作我得到錯誤'表達式#3的SELECT列表不在GROUP BY子句中並且包含非聚集列'test.spEvd.start_date',它在功能上不依賴於GROUP BY子句中的列;這是不符合sql_mode = only_full_group_by' – Neil

+0

你使用的是什麼mysql版本?這是一個MySQL版本的問題..好像你的MySQL版本不支持別名與組通過.. ==>關於錯誤,請檢查此鏈接http://stackoverflow.com/questions/34115174/i-am-getting -an-error-in-mysql-related-to-only-full-group-by-when-executed-a-qu – Noman

+0

我已更新查詢,請檢查。 – Noman