【发布时间】:2012-12-18 16:02:37
【问题描述】:
我有这个数据表:
NAME | GROUP
------------
a1 | A
a22 | A
c1 | C
c2 | C
s1 | NULL
t1 | NULL
如何选择名为a1 的记录,如果此记录有group <> NULL,还包括同一组中的其他项目?
我试过子查询:
SELECT `name`, `group` FROM `tbl`
WHERE (`name` = 'a1' AND `group` IS NULL) OR `group` = (SELECT `group` FROM `tbl` WHERE `name` = 'a1')
EXPLAIN:
id select_type table type possible_keys key key_len ref rows
1 PRIMARY tbl ALL PRIMARY NULL NULL NULL 6 Using where
2 SUBQUERY tbl const PRIMARY PRIMARY 386 const 1
这可行,但我不确定它是否 100% 正确和有效。正在寻找更好的解决方案,也许是JOIN?
MySQL 内部问题:内部SELECT 查询是否针对外部表中的每条搜索记录执行?此查询的结果是否已缓存(如 SELECT SQL_CACHE 查询)?
【问题讨论】:
-
请发布EXPLAIN的结果
-
只有我或这个查询,如果
a1的group是NULL,将返回a1、s1和t1? -
是的,这个查询不太擅长,应该加
NULL测试 -
已添加说明,已修复 NULL 组