内连接与连接表上的条件

时间:2012-10-22 11:49:09

标签: mysql sql

我正在尝试使用以下query收集数据:

SELECT * 
FROM `table1` AS `t1` 
INNER JOIN `table2` AS `t2` 
  ON `t1`.`id`=`t2`.`id` 
WHERE  `t2`.`name`='myname'

看起来WHERE条件被忽略了。是否可以在联接表上应用WHERE条件?

2 个答案:

答案 0 :(得分:5)

在这种情况下也不应忽略'Where'子句。

如果要排除where条件,可以将条件写为ON子句的一部分。

SELECT * 
FROM `table1` AS `t1` 
INNER JOIN `table2` AS `t2` 
  ON `t1`.`id`=`t2`.`id`  
    and `t2`.`name`='myname'

答案 1 :(得分:1)

在搜索字符串之前和之后使用带有'%'符号的LIKE关键字来解决问题始终是个好主意:

-- This would match the following:
-- ' myname'
-- 'myname '
-- Wow! Who put that space in there?.. :)
WHERE t2.name LIKE '%myname%'

此外,桌面上可能设置了case sensitive collation。要使查询不区分大小写,您可以使用Collate关键字:

-- Case doesn't matter now
WHERE t2.name COLLATE Latin1_General_CI_AS = 'mYnAmE'

关于结合条件......

  

MSDN: Using Inner Joins

     

在ISO标准中,可以在FROM或WHERE子句中指定内部联接。这是ISO在WHERE子句中支持的唯一连接类型。 WHERE子句中指定的内部联接称为旧式​​内部联接。

因此,组合条件如下:

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2
  ON t1.id = t2.id AND t2.name = 'myname'
  -- No 'where' clause required

Here是关于stackoverflow的类似帖子:SQL join: where clause vs. on clause