复制行,同时忽略基于特定列的重复项

时间:2016-02-08 23:17:14

标签: php mysql

我想在更改列call_list_row时复制表listid中的行,但我只想复制行并更改listid,如果没有其他行$new_list_id 1}}已经有一个特定candid的行。

这是我必须复制行并更改listid

的SQL
$sql= "INSERT INTO call_list_row (listid,candid,date,byuser,status,emailed)
         SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
         FROM call_list_row WHERE listid='".$list."'";

如何修改此设置,以便表格中没有与$new_list_id具有相同candid的新 public static Paint createPaint(int color, int strokeWidth, Style style) { Paint paint = AndroidGraphicFactory.INSTANCE.createPaint(); paint.setColor(color); paint.setStrokeWidth(strokeWidth); paint.setStyle(style); return paint; } 的行?

1 个答案:

答案 0 :(得分:2)

在复合键listid, candid上创建唯一索引:

CREATE UNIQUE INDEX x_listid_candid ON call_list_row(listid, candid);

然后您可以使用INSERT IGNORE,这样如果表格中已经包含该组合的行,则会跳过INSERT而不会出错。

$sql= "INSERT IGNORE INTO call_list_row (listid,candid,date,byuser,status,emailed)
     SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
     FROM call_list_row WHERE listid='".$list."'";

如果您无法创建此索引(可能允许重复,但您不想在此过程中创建任何新的重复项),则可以签入查询。

$sql= "INSERT IGNORE INTO call_list_row (listid,candid,date,byuser,status,emailed)
     SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
     FROM call_list_row AS c1 WHERE listid='".$list."'
     AND NOT EXISTS (
        SELECT * FROM call_list_row AS c2
        WHERE listid = '$new_list_id' AND c1.candid = c2.candid)";