2012-04-23 21 views
0

我有一個查詢,我正在處理一個屬性數組, [1,2,3,4]等。我需要檢查一個表,看看是否存在具有該ID的記錄,我對那些不存在的記錄感興趣,而不是那些記錄。SQL返回記錄的Id參數被發現不存在

目前我正在循環Ruby中的數組,然後爲每個請求單獨的SELECT請求。這是有效的,但通常這個數組非常長,而且看起來效率很低,從而導致許多單獨的請求。

我想知道是否有一種方法可以將整個數組傳遞給Postgres,然後Postgres將所有的ID都不存在。

感謝,

克里斯

回答

1

好想通了:

SELECT * 
FROM unnest(ARRAY[1,2,3,4,5]) as s 
WHERE s NOT IN (SELECT id FROM my_table); 
+0

在8.4或更高版本,它是一般最好使用'不EXISTS'而不是'不IN':'AS s(id)WHERE NOT EXISTS(SELECT * FROM my_table m WHERE m.id = s.id);'這通常會優化爲更快的大卷計劃,並且如果您有NULL陣列。 – kgrittn 2012-04-23 11:39:14

+0

使用generate_series(1,5)作爲s'而不是unnest可能會更清晰....它可能表現更好。 – 2012-10-15 02:37:43

相關問題