我遇到一个问题,它是,
SELECT it1.survey_set_id, it1.type, it1.value FROM survey_condition_filter it1 LEFT JOIN survey_condition_filter it2 ON(it1.survey_set_id = it2.survey_set_id AND it2.type = 3002) WHERE it1.type IN (2000, 2001, 2002) AND it2.value IS NULL;
为什么在上面的查询中使用自左联接.
SELECT survey_set_id, type, value FROM survey_condition_filter WHERE type IN (2000, 2001, 2002);
上面的查询不是等同于第一个使用自左联接的查询吗?因为查询只过滤了IN (2000, 2001, 2002) AND it2.value IS NULL
.我在这里混淆了连接查询的用法,并且不能真正理解第一个查询的工作原理.
这是survey_condition_filter号桌
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| survey_id | bigint | NO | PRI | NULL | |
| survey_set_id | bigint | NO | PRI | NULL | |
| type | int | NO | PRI | NULL | |
| condition | tinyint | NO | PRI | NULL | |
| value | varchar(15) | NO | PRI | NULL | |
| display_value | text | NO | | NULL | |
| order | int | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| created_by | varchar(255) | YES | | NULL | |
| updated_at | datetime | NO | | NULL | |
| updated_by | varchar(255) | YES | | NULL | |
| deleted_at | datetime | YES | | NULL | |
| deleted_by | varchar(255) | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+