0

我有这张数据表:

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查询)?

4

1 回答 1

1

以下查询将返回与规范匹配的结果集。

SELECT DISTINCT COALESCE(t.name,s.name) AS `name`
  FROM `tbl` s
  LEFT
  JOIN `tbl` t
    ON t.group = s.group
 WHERE s.name = 'a1'

如果name = 'a1'表中存在具有 的行,则将返回该行。该查询还将返回值与name具有的行的group任何值相匹配的值。groupname = 'a1'

于 2012-12-18T16:20:36.373 回答