2016-09-26 169 views
0

我在我的数据库中有几个条目,可以说它是一个包含书籍的图书库。删除双条目

E.g.

Bookname A - UserA 
Bookname B - UserB 

我现在导入了一些同名的书籍,并将“UserC”作为它们的所有者。

所以现在我有

Bookname A - UserA 
Bookname B - UserB 
Bookname A - UserC 
Bookname C - UserC 

如何删除只有那些条目,其中所有者是用户C和BOOKNAME已经被其他人是不是用户C拥有的?

我的结果应该是:

Bookname A - UserA 
Bookname B - UserB 
Bookname C - UserC 

谢谢!

+0

如何决定哪个入口是正确的,应该保存? (例如,可能通过ID或插入日期。) – syck

+0

在这种情况下,如果已经有UserA的书籍,例如,我们可以假设用UserC中的那个错误添加到数据库中。 P.S.由于某些特定的情况,它不可能使用书名作为主键。 –

回答

0

您可以使用基于具有与多个入口和过滤器获取名称子查询中删除用户=“C”

delete from my_table 
where bookname in ( 
    select Bookname 
    from my_table 
    group by Boookname 
    having count(*) > 1) 
and User = 'C'; 
+0

**在**中的名称 - 这是什么表示?你的意思是“书名”? –

+0

@MKKayodoubleu是的是bookanme – scaisEdge

0

与内选择答案不能工作,因为它使用FROM子句中的更新目标。 MySQL不允许这样做。 但删除连接,这是可能的。我的解决方案可能不是最优雅的,但它的工作原理:

DELETE t1 FROM book_table t1 LEFT JOIN book_table t2 ON t1.book = t2.book AND t2.user <> 'C' WHERE t1.user = 'C' AND t2.user IS NOT NULL; 

更好的测试它首先,有选择的,而不是删除,所以你可以看到它会删除正确的条目。