我有两个表,表结构如下。
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。
答案 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
;
结果:
| Id | item_name | item_ids |
|----|-----------|----------|
| 1 | pens | 12 |
| 1 | pens | 13 |