2016-09-21 88 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