我有一個包含生產數據的表Prod。在Prod,A和B中有兩個字段用作鍵(這兩個字段都是VARCHAR)。我有另一張桌子,Stage,我想導入到Prod中。但是,在導入Stage之前,我想檢查Stage是否有已經在Prod中的行。任何重複的行都將從導入中排除。Postgres SQL在使用並置(||)運算符時不返回預期的行
我的問題是:
當我運行一個查詢,如
SELECT A, B
FROM Stage
WHERE A || B NOT IN (
SELECT A || B
FROM Prod
)
我期望我會接受所有非重複的(新)項的列表。但是,我沒有收到任何結果。
而且,當我運行
SELECT A, B
FROM Stage
WHERE A || B IN (
SELECT A || B
FROM Prod
)
其中唯一的區別是變化NOT IN
到IN
,我只接收表的子集返回什麼,我會希望是整個表來代替。
我知道這個問題有什麼做的級聯(||)運算符,因爲當我運行返回
SELECT A
FROM Stage
WHERE A NOT IN (
SELECT A FROM Prod
)
行和IN
版本的查詢返回剩餘行。
有沒有人有任何想法?
「Stage」和「Prod」中的'A'和'B'類型是什麼? –
你應該使用'where(a,b)not in(select a,b ...)'。級聯會導致錯誤,因爲'abc'可能意味着'a,bc'或'ab,c'。如果'a'或'b'可以爲null,那麼'not in'不會返回任何東西,如果至少有一行其中一個是'null' –
@ClodoaldoNeto A和B在生產中也是VARCHAR – zgall1