2016-05-29 24 views
0

我有一個名爲「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); 

SQLFiddle

定的代碼點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

所謂的關係分割。請參閱http://stackoverflow.com/questions/31101480/what-is-the-performance-difference-in-mysql-relational-division-in-and-而不是針對該任務的Mysql選項。 – Serg

回答

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 
        ); 
0

我想你前人的精力使用具有b UT無子查詢

SELECT 
distinct 
emoji_id, 
code_point, 
`order` 
FROM emoji 
WHERE code_point IN (127467, 127479) 
having cont(*) = 2; 
相關問題