在列中选择具有相同值的特定记录或记录

时间:2012-12-18 16:02:38

标签: mysql select

我有这个数据表:

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

1 个答案:

答案 0 :(得分: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值与group行的name = 'a1'值匹配。