2015-03-02 37 views
-1

我有两个表格,表格结构如下。从表格中获取逗号分隔值

 
Table: items 
Id item_name  item_ids 
1 pens   10,11,12,13 
2 books   20, 30 
3 computer  50, 60, 80 

Another table : activities 

Id activity_id 
1 10 
2 11 
3 20 
4 60 

所以现在我想用获得从项目表中不存在活动表ITEM_IDS只有连接。 否子查询。比方说,我想检索那些不在活动表中的钢笔的item_id。 Ex对于钢笔,item_ids是10,11,12,13。我的结果应该是12和13.

+1

你应该正常化您的项目表。在列中使用逗号分隔的ID列表不是最佳做法。 – 2015-03-02 19:11:08

+0

@Rick S.是的,这不是很好的做法,但要求是:( – orangetime 2015-03-02 19:19:30

+1

为什么没有子查询? – 2015-03-02 20:00:07

回答

0

此查询使用某些字符串操作并使用数字表(内联创建为派生表)从item_ids中提取单个项目。请注意,它最多只能处理逗号分隔列表中的9个项目,但如果您期望更多,则只需向派生表中添加更多数字即可。

SELECT 
    items.id, 
    items.item_name, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(items.item_ids, ',', numbers.n), 
      ',', 
      - 1) item_ids 
FROM 
    (SELECT 1 n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) numbers 
     INNER JOIN 
    items ON CHAR_LENGTH(items.item_ids) - CHAR_LENGTH(REPLACE(items.item_ids, ',', '')) >= numbers.n - 1 
     LEFT JOIN 
    activities a ON SUBSTRING_INDEX(SUBSTRING_INDEX(items.item_ids, ',', numbers.n), 
      ',', 
      - 1) = a.activity_id 
WHERE 
    item_name = 'Pens' 
     AND activity_id IS NULL 
; 

Sample SQL Fiddle

结果:

| Id | item_name | item_ids | 
|----|-----------|----------| 
| 1 |  pens |  12 | 
| 1 |  pens |  13 | 
相关问题