2016-02-04 30 views
0

考虑表如何查询重复的元素?

CREATE TABLE `contact` (
    `id` INTEGER, 
    `name` TEXT, 
    `category` INTEGER, 
    `freed` INTEGER DEFAULT 0, 
    PRIMARY KEY(id) 
); 

我想做出这样的查询或视图,将重复的行与freed = 1 AND caregory IS NOT NULL,对于类别应设置为-1的行。应删除行(category is null and freed = 1)

第一张图片显示数据源。第二张照片显示所需结果。
3个新的行应增加(金,-1,1 | TIH,-1,1 | Traph,-1,1)
1原料是souldbe删除(Traph,空,1)

enter image description here

WHERE NOT(category is null and freed = 1) 
    ORDER BY category IS NULL ASC, category = -1 ASC, category ASC , name ASC 

enter image description here

是否有可能使类似

CREATE VIEW v1 AS 
SELECT s.name, s.category, s.freed 
FROM contact s 
CASE freed = 1 and category is not null 
    insert into v1(t.name,-1,1) 
    SELECT p.name 
    FROM contact p 
    WHERE s.name = p.name 
+1

不,但它可能就像我张贴在我的答案。视图代表一个选择查询,它不能更新或插入。 – sagi

回答

0

那么ÿ OU需要的是这样的:

INSERT INTO CONTACT 
(SELECT Name,-1,1 FROM CONTACT 
WHERE CATEGORY IS NOT NULL AND FREED = 1) 

和删除:

DELETE FROM CONTACT 
WHERE CATEGORY IS NULL AND FREED = 1 

或者,如果你想在一个查询,则:

SELECT Name,-1,1 FROM CONTACT 
WHERE CATEGORY IS NOT NULL AND FREED = 1 
UNION 
select nam,ecategory,freed 
FROM CONTACT 
1

如果你只是想要的值,则:

select name, category, freed 
from contact c 
where category is null and freed = 1 
union all 
select name, -1, freed 
from contact 
where category is not null and freed = 1; 

主要问题是得到一个合适的id值。这在SQLite中有点棘手,而你的“回填”数字的例子根本不容易实现。

+0

请看问题的更新底部。是否有可能做出这样的看法? – Yarh