1

結合を行うときにMySQLで見つけたので、次のような単語ANDの代わりに使用できます。WHERE

SELECT * FROM `mySchema`.`tblOne`
LEFT JOIN `mySchema`.`tblTwo` ON `tblOne`.`FIELDX` = `tblTwo`.`FIELDY`
AND `FIELDZ` = 'FooBar';

これはバグですか、それとも機能がありますか?これが役立つシナリオはありますか?

ありがとう

4

4 に答える 4

4

あなたANDON条項のためです、これは条項とは関係ありませんWHERE

于 2012-07-03T14:29:50.280 に答える
3

JOINlink)のドキュメントを見ると、ONキーワードの後に​​。があることがわかりますconditional_expr

これは、句conditional_exprで使用されるものと同じです。つまり、基本的には、後のようにWHERE同じことを行うことができます。ONWHERE

その後、括弧や他のすべての条件演算子ANDを使用することもできます。OR

于 2012-07-03T14:32:14.440 に答える
2

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= tblTwoFIELDY、次に`tblTwo.FIELDY='FooBar'でフィルタリングします。実質的にはINNERJOINと同じになります。

于 2012-07-03T14:45:02.137 に答える
0

これはSQLServer2008でも機能します。それがどのようにバグになるかわかりません。JOINの「ON」部分は「WHERE」に似ています。基本的に、クエリの内容は次のとおりです。

WHERE tblOne.FIELDX = tblTwo.FIELDY AND FIELDZ = 'FooBar';

あなたが使用することができます:

ON FIELDX = FIELDY AND FIELDZ = 'FooBar'

また:

ON FIELDX = FIELDY
WHERE FIELDZ = 'FooBar'
于 2012-07-03T14:32:52.273 に答える