結合を行うときにMySQLで見つけたので、次のような単語AND
の代わりに使用できます。WHERE
SELECT * FROM `mySchema`.`tblOne`
LEFT JOIN `mySchema`.`tblTwo` ON `tblOne`.`FIELDX` = `tblTwo`.`FIELDY`
AND `FIELDZ` = 'FooBar';
これはバグですか、それとも機能がありますか?これが役立つシナリオはありますか?
ありがとう
結合を行うときにMySQLで見つけたので、次のような単語AND
の代わりに使用できます。WHERE
SELECT * FROM `mySchema`.`tblOne`
LEFT JOIN `mySchema`.`tblTwo` ON `tblOne`.`FIELDX` = `tblTwo`.`FIELDY`
AND `FIELDZ` = 'FooBar';
これはバグですか、それとも機能がありますか?これが役立つシナリオはありますか?
ありがとう
あなたAND
はON
条項のためです、これは条項とは関係ありませんWHERE
。
JOIN
(link)のドキュメントを見ると、ON
キーワードの後に。があることがわかりますconditional_expr
。
これは、句conditional_expr
で使用されるものと同じです。つまり、基本的には、後のようにWHERE
同じことを行うことができます。ON
WHERE
その後、括弧や他のすべての条件演算子AND
を使用することもできます。OR
ON ... AND ...
を使用すると、次の結果とは異なる結果になる可能性があることに注意してくださいON ... WHERE
。
SELECT * FROM `mySchema`.`tblOne`
LEFT JOIN `mySchema`.`tblTwo` ON `tblOne`.`FIELDX` = `tblTwo`.`FIELDY`
AND `FIELDZ` = 'FooBar';
FIELDZがtblTwoにある場合(上記からは明らかではありません)、これはからのすべての行を返しtblOne
、tblTwoからの一致する行を結合します(つまり、FIELDY =tblOne.FIELDXおよびFIELDZ='FooBar'を持つ行)
SELECT * FROM `mySchema`.`tblOne`
LEFT JOIN `mySchema`.`tblTwo` ON `tblOne`.`FIELDX` = `tblTwo`.`FIELDY`
WHERE `FIELDZ` = 'FooBar';
FIELDZがtblTwoにある場合、これはに参加しtblOne
ます。FIELDX
= tblTwo
。FIELDY
、次に`tblTwo.FIELDY='FooBar'でフィルタリングします。実質的にはINNERJOINと同じになります。
これはSQLServer2008でも機能します。それがどのようにバグになるかわかりません。JOINの「ON」部分は「WHERE」に似ています。基本的に、クエリの内容は次のとおりです。
WHERE tblOne.FIELDX = tblTwo.FIELDY AND FIELDZ = 'FooBar';
あなたが使用することができます:
ON FIELDX = FIELDY AND FIELDZ = 'FooBar'
また:
ON FIELDX = FIELDY
WHERE FIELDZ = 'FooBar'