我正在尝试使用以下方法收集数据query
:
SELECT *
FROM `table1` AS `t1`
INNER JOIN `table2` AS `t2`
ON `t1`.`id`=`t2`.`id`
WHERE `t2`.`name`='myname'
看起来WHERE
条件被忽略了。是否可以WHERE
在连接表上应用条件?
在这种情况下也不应忽略“Where”子句。
如果要排除 where 条件,可以通过将条件写为 ON 子句的一部分来实现。
SELECT *
FROM `table1` AS `t1`
INNER JOIN `table2` AS `t2`
ON `t1`.`id`=`t2`.`id`
and `t2`.`name`='myname'
在搜索字符串前后使用带有“%”符号的LIKE关键字来解决问题总是一个好主意:
-- This would match the following:
-- ' myname'
-- 'myname '
-- Wow! Who put that space in there?.. :)
WHERE t2.name LIKE '%myname%'
此外,表上可能设置了区分大小写的排序规则。要使查询不区分大小写,您可以使用Collate关键字:
-- 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 子句。