【问题标题】:where clause in inner join内部连接中的 where 子句
【发布时间】:2016-11-24 14:36:36
【问题描述】:

我正在生成一个查询。我有两个表名:航班和目的地。 在航班表中,我有列:id、department、destination、price、airline、class 在我有列的目的地表中:id, destination, country, region.

现在我想获取区域为"Europe" 的航班详细信息。我在做inner join。我的查询是这样的:

SELECT * 
FROM  `flights` 
INNER JOIN destinations ON flights.destination = destinations.destination
where region= 'europe'

它给了我空结果。如果我从查询中删除 (where region= 'europe'),那么它会给我所有航班和目的地列的结果。

请帮帮我

【问题讨论】:

  • 大写/小写问题?
  • 不,这不是问题
  • 您确定这些行存在于数据库中吗?

标签: mysql


【解决方案1】:

试试这个

SELECT * 
FROM  `flights` 
INNER JOIN destinations 
  ON flights.destination = destinations.destination
where LOWER(region) = 'europe'

【讨论】:

  • 但是 OP 说 JOIN 单独返回航班。改为在 WHERE 中执行 LOWER...
  • @jarlh 是的,为了快速回答而感到困惑。更新了查询。
【解决方案2】:

我注意到您说'Europe' 是区域。 MySQL 可以区分大小写,具体取决于用于数据库和表的排序规则(但不是默认情况下)。所以,我将从比较正确的情况开始:

SELECT * 
FROM flights f INNER JOIN 
     destinations d
     ON f.destination = d.destination
WHERE d.region = 'Europe';

如果这不起作用,那么奇怪的字符可能会潜入region 列。你可以试试:

WHERE lower(d.region) like '%europe%'

【讨论】:

  • 它与“%europe%”之类的较低(d.region)一起使用。你能告诉我我是怎么在codeigniter中写这个查询的吗????
  • @HarrisKhan 。 . .一个新问题应该作为 new 问题提出。这个问题显然与 Codeigniter 无关。如果您更改问题,那么您将使当前的答案无效,这是不礼貌的,因为这会吸引反对票。
【解决方案3】:

由于您使用的是内连接,因此您可以将区域指定为连接条件的一部分,如下所示:

    SELECT * 
    FROM  `flights` 
    INNER JOIN destinations ON flights.destination = destinations.destination 
        AND destinations.region = 'europe'

Flights.Destination 值是否存储 Destination 表的 Id?您可能需要将连接调整为

flights.destination = destinations.Id

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2011-01-01
    • 2012-09-04
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多