MySQL 5.7では奇妙な動作(バグ?)が発生しましたが、これはMySQL 5.5では表示されません。LEFT JOINを使用してクエリを実行すると、MySQL EmptyテーブルがTRUEを返します。
だから私はそれを説明するための例が必要です。
- 左を使用してテーブルを作成して2つのテーブルに参加
- は、第二のテーブルが空である(レコードなし)が、それの分野の一つで書かれた静的な値を持つことにより構成されていることを確認します。
左(予想通り)がNラインを生成ない条件
左決してはまた、Nラインを生成一致しない状態との結合との結合します。
### EXAMPLE ###
## CREATE TABLES
create table PCPL (K1 int); ## Table 1
create table AUX (K2 int); ## Table 2
## FILL IN TABLES
insert into PCPL values (1),(2),(3); ## fill main table with 3 values
truncate table AUX; ## No need to do this, just to make things clearer
## TEST 1 : "Dry Left join" => RESULT OK : Resulting Table has 3 rows
select PCPL.K1 as K1 , DERIVED.K2 as K2
from PCPL
LEFT JOIN (select K2, 1 as staticValue from AUX) DERIVED
ON PCPL.K1 = DERIVED.K2;
+------+------+
| K1 | K2 |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+------+------+
3 rows in set (0,00 sec)
## TEST 2 : "Never matching condition" => STRANGE : Resulting Table NOT empty
select PCPL.K1 as K1 , DERIVED.K2 as K2
from PCPL
LEFT JOIN (select K2, 1 as staticValue from AUX) DERIVED
ON PCPL.K1 = DERIVED.K2
where staticValue=1; ##### THIS CONDITION IS NEVER MET SINCE TABLE AUX IS EMPTY
+------+------+
| K1 | K2 |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+------+------+
3 rows in set (0,00 sec)
THIS SHOULDN'T HAPPEN !
この動作は、MySQL 5.5
では発生しません。これは私が5.7に設定するのを忘れ5.5のバグか、いくつかのパラメータですか?
ありがとうございました!
が見えます。私はIS NOT NULLに対して1を変更し、まだすべての行を持ちますが、staticValueの値は実際にはNULLではないようです。 http://rextester.com/XPM1274 'version()= 5.7.12-log' –
こんにちは、あなたは私と同じ振る舞いをしていますか? 5.7.18-log MySQLコミュニティサーバ(GPL) –
はい、同じ動作です。 Rextesterを確認してください –