Ich versuche das:
select * from "User" where "partnerData" -> 'name'!= NULL
partnerData
ist ein JSONB. Ich würde diese Zeilen sehen, hat das name
Feld nicht in JSON.
Lösung des Problems
Sie können <>
(oder !=
oder einen anderen Operator) nicht verwenden, um nach NULL-Werten zu suchen, Sie müssen verwenden IS NULL
. Using ->
gibt auch einen jsonb
Wert zurück, der möglicherweise das Literal und null
nicht der SQL- NULL
Wert ist. Sie sollten also verwenden ->>
, um einen Textwert zurückzugeben (der dann ein SQL NULL wäre).
select *
from "User"
where "partnerData" ->> 'name' IS NULL
Beachten Sie, dass hier nicht zwischen einem JSON-Wert, der den Schlüssel enthält, name
aber mit einem Wert von NULL und einem JSON-Wert, der den Schlüssel überhaupt nicht enthält, unterschieden wird.
Wenn Sie nur prüfen möchten, ob der Schlüssel existiert (unabhängig vom Wert – auch wenn es sich um eine JSON-Null handelt), verwenden Sie den ?
Operator.
where "partnerData"? 'name'
Keine Kommentare:
Kommentar veröffentlichen