2014-09-26 65 views
0

这是一个过滤器的形式。我有两个表是这样的:
巡航(ID,姓名,[...])
cruise_itineraries(ID,cruise_id,port_name中指,DEPARTURE_TIME,[...])选择相关搜索的第一个结果是否匹配?

如果我要选择所有游轮它通过一些端口,我会做这样的事情:

SELECT cruise.* 
FROM cruise, 
    cruise_itineraries 
WHERE cruise_itineraries.cruise_id = cruise.id AND cruise_itineraries.port_name LIKE %?% 

不过,我想它开始它在一个选定的端口发送所有的游船,这意味着这必须从cruise_itineraries查询的第一条记录与cruise_id匹配。 我已经试过这样的事情:

SELECT cruise.* 
FROM cruise, 
    cruise_itineraries 
WHERE (
     SELECT port_name 
     FROM cruise_itineraries, 
      cruises 
     WHERE cruise_itineraries.cruise_id = cruise.id 
     ORDER BY cruise_itineraries.id ASC LIMIT 1) 
LIKE %?% 

也就是说,让每一个ID的第一条记录,并与%%匹配它,但我没有得到任何结果?

我应该怎么做呢?

+0

您需要使用JOIN,并且您为什么要选择巡航。 – Arun 2014-09-26 18:13:03

+0

该加入过程如何?我选择巡航。*因为我想要所有邮轮列。 – 2014-09-26 18:22:39

+0

你不需要巡航。*。只需*如此选择*您能否为我们提供这两个表的示例,以及您想要的结果示例。 (他们看起来像什么) – Arun 2014-09-26 18:24:15

回答

0

它看起来像你只想要港口最早出发的行程。

SELECT cruise.* 
FROM cruise 
INNER JOIN cruise_itineraries ci ON 
    ci.cruise_id = cruise.id 
    AND ci.port_name LIKE %?% 
    AND ci.departure_time = (select min(ci2.departure_time) 
     from cruise_itineraries ci2 
     where ci2.cruise_id = ci.cruise_id and ci2.port_name= ci.port_name 
     group by ci2.cruise_id, ci2.port_name) 
相关问题