以下を使用してデータを収集しようとしています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
スタックオーバーフローに関する同様の投稿は次のとおりです。SQL結合:where句とon句。