我有一张名为" emoji"它存储每个表情符号的代码点。
CREATE TABLE `emoji` (
`emoji_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`code_point` int(10) unsigned NOT NULL,
`order` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`emoji_id`,`code_point`),
KEY `code_point, order` (`code_point`,`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO emoji (emoji_id, code_point, `order`) VALUES(1, 127467, 0), (1, 127479, 1), (2, 127472, 0), (2, 127479, 1);
鉴于代码点127467和127479,我如何只能获取共享相同emoji_id
(在这种情况下为1
)的行?
我尝试过以下方法:
SELECT
emoji_id,
code_point,
`order`
FROM
emoji
WHERE
code_point IN (127467, 127479) AND
emoji_id IN (
SELECT
emoji_id
FROM
emoji
GROUP BY
emoji_id
HAVING
COUNT(emoji_id) > 1
)
但是127479是几个不同表情符号中的共享代码点,因此使得计数过滤无效,并且还返回此示例中集合中的最后一条记录。
答案 0 :(得分:1)
您可以通过以下方式获取表情符号列表:
SELECT emoji_id
FROM emoji
WHERE code_point IN (127467, 127479)
GROUP BY emoji_id
HAVING COUNT(emoji_id) = 2;
您可以将其合并到查询中以获取详细信息:
select e.*
from emoji
where e.emoji_id in (SELECT emoji_id
FROM emoji
WHERE code_point IN (127467, 127479)
GROUP BY emoji_id
HAVING COUNT(emoji_id) = 2
);
答案 1 :(得分:0)
我认为你可以使用没有子查询的b ut
SELECT
distinct
emoji_id,
code_point,
`order`
FROM emoji
WHERE code_point IN (127467, 127479)
having cont(*) = 2;