結合を行うときに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同じことを行うことができます。ONWHERE
その後、括弧や他のすべての条件演算子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'