1

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

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

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

4

2 回答 2

5

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

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

SELECT * 
FROM `table1` AS `t1` 
INNER JOIN `table2` AS `t2` 
  ON `t1`.`id`=`t2`.`id`  
    and `t2`.`name`='myname'
于 2012-10-22T11:52:57.143 回答
1

在搜索字符串前后使用带有“%”符号的LIKE关键字来解决问题总是一个好主意:

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

此外,表上可能设置了区分大小写的排序规则。要使查询不区分大小写,您可以使用Collat​​e关键字:

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

关于结合条件...

MSDN:使用内部联接

在 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

是关于 stackoverflow 的类似帖子:SQL 连接:where 子句与 on 子句

于 2012-10-22T12:52:03.240 回答