我有一个包含用户信息的表:
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
答案 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