从表中获取逗号分隔值

时间:2015-03-02 19:07:11

标签: mysql join

我有两个表,表结构如下。

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

所以现在我想从items表中获取item_ids,这些只是使用 JOINS 在活动表中不存在。 没有子查询。假设我想要检索那些不在活动表中的笔的item_id。 Ex对于笔,item_ids为10,11,12,13。我的结果应该是12和13。

1 个答案:

答案 0 :(得分: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 |