我使用PHP在postgresql中生成一个表。
有许多行具有相同的值,但第一列除外,这是唯一的ID。当我尝试基于gene_id,searchterm和type中的类似值进行删除时。
因此,我使用了以下代码:
$sql = "SELECT DISTINCT gene_id FROM searchterms";
或
$sql = "SELECT DISTINCT ON (gene_id,searchterm,types) * FROM searchterms";
执行此代码后,我仍然得到相同的结果。我想只保留id为4的行。
答案 0 :(得分:1)
您是要删除所有空行?
DELETE FROM searchterms WHERE gene_id = 0
对于具有重复项的非空行,您需要选择具有多个行的行:
SELECT gene_d, COUNT(*) c FROM table GROUP BY name HAVING c > 1;
然后,您可以从数组中弹出一个元素,然后删除其他ID。
要停止首先添加重复项,只需先执行SELECT
查询,如果未找到任何行,请执行INSERT
。
答案 1 :(得分:1)
Select * from searchterms WHERE gene_id <> 0 AND searchterm <> 0 AND types <> 0 group by gene_id,searchterm,types
答案 2 :(得分:1)
您应该首先阻止它们插入。
例如
if(geneid == 0){
break;
}else{
# insert query}
答案 3 :(得分:0)
我认为在这种情况下,distinct不会起作用。因为如果你给出了不同的信息,它仍会显示2条记录,即gene_id = 0和gene_id = 1253246。
所以为了避免那些其他记录,你可能需要检查像gene_id&lt;&gt;这样的条件。 0或gene_id&gt; 0