我正在尝试使用以下query
收集数据:
SELECT *
FROM `table1` AS `t1`
INNER JOIN `table2` AS `t2`
ON `t1`.`id`=`t2`.`id`
WHERE `t2`.`name`='myname'
看起来WHERE
条件被忽略了。是否可以在联接表上应用WHERE
条件?
答案 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。