MySQL选择缺失的行

时间:2015-09-21 23:08:22

标签: mysql select

我有一个包含用户信息的表:

    user_id | meta_key | meta_value
 -----------+----------+-------------
      1     | name     | John
      1     | surname  | Doe
      2     | name     | Luke
      3     | name     | Jane

我希望在给定ID列表的情况下选择具有特定键的行。

如果我这样做:

SELECT meta_value FROM table WHERE meta_key = 'surname' AND user_id IN(1,2,3)

MySQL只返回用户1的信息,因为其他人没有姓氏。

我想构建一个查询,以便在传递ID时准确返回行数,如果该特定用户在表中没有姓氏,则返回NULL(或空字符串)。

我尝试使用IFNULL(meta_value, "")并使用IF,但似乎没有帮助。

有什么建议吗?我确信这是一件微不足道的事情,但我似乎无法解决这个问题。

这是一个显示问题的SQL小提琴:http://sqlfiddle.com/#!9/86eef2/6

我的预期输出是:

Doe
NULL
NULL

1 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT DISTINCT user_id,
(SELECT meta_value FROM mytable B WHERE B.user_id = mytable.user_id AND META_KEY = 'surname') AS 'surname_meta_value'
FROM mytable
WHERE user_id IN(1,2,3)

出于研究目的,在大多数情况下,这可能是一个更快的选择,基于 rlb.usa 解决方案:

SELECT user_id, 
GROUP_CONCAT(
(CASE WHEN meta_key = "surname" 
    THEN meta_value
    ELSE '' 
END) SEPARATOR '')
AS 'surname_meta_value'
FROM mytable WHERE user_id IN(1,2,3)
GROUP BY user_id