Select 行按复合键的一部分与复合键的其余部分匹配?
Select rows by part of composite key that all match the remainder of composite key?
我有一个名为 "emoji" 的 table,它存储每个表情符号的代码点。
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 是几个不同表情符号之间的共享代码点,因此使计数过滤变得无用,并返回本例中集合中的最后一条记录。
我认为你应该使用有但没有子查询
SELECT
distinct
emoji_id,
code_point,
`order`
FROM emoji
WHERE code_point IN (127467, 127479)
having cont(*) = 2;
您可以通过以下方式获得表情符号列表:
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
);
我有一个名为 "emoji" 的 table,它存储每个表情符号的代码点。
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 是几个不同表情符号之间的共享代码点,因此使计数过滤变得无用,并返回本例中集合中的最后一条记录。
我认为你应该使用有但没有子查询
SELECT
distinct
emoji_id,
code_point,
`order`
FROM emoji
WHERE code_point IN (127467, 127479)
having cont(*) = 2;
您可以通过以下方式获得表情符号列表:
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
);