開発でよく犯すエラー→【joinテーブル接続関連クエリー】
1312 ワード
最近SQLを審査する時、いくつかの開発はいつもこの間違いを犯すことを発見して、以下は簡単な例を挙げて、A表とB表idの同じ記録を探し出して(しかもB表のないid記録も探し出して)、しかもnameの名前は'b'の記録に等しいことを説明します.表のデータ:
間違った書き方:
正しい書き方:
ほほほ、面接問題になることができます.
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
| 6 | b |
+----+------+
6 rows in set (0.00 sec)
mysql> select * from t2;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | cc |
| 4 | e |
| 5 | b |
+----+------+
5 rows in set (0.00 sec)
間違った書き方:
mysql> select * from t1 left join t2 on t1.id=t2.id and t1.name='b';
+----+------+------+------+
| id | name | id | name |
+----+------+------+------+
| 2 | b | 2 | b |
| 1 | a | NULL | NULL |
| 3 | c | NULL | NULL |
| 4 | d | NULL | NULL |
| 5 | e | NULL | NULL |
| 6 | b | NULL | NULL |
+----+------+------+------+
6 rows in set (0.00 sec)
正しい書き方:
mysql> select * from t1 left join t2 on t1.id=t2.id where t1.name='b';
+----+------+------+------+
| id | name | id | name |
+----+------+------+------+
| 2 | b | 2 | b |
| 6 | b | NULL | NULL |
+----+------+------+------+
2 rows in set (0.00 sec)
ほほほ、面接問題になることができます.