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

スタックオーバーフローに関する同様の投稿は次のとおりです。SQL結合:where句とon句

于 2012-10-22T12:52:03.240 に答える