我有一个这样的数组:
["f383224c-aa95-40c9-a4e4-fa41747f49c5","c783234c-aa95-40c9-a4e4-fa41747f49c6"]
我想选择任意但我收到错误无法将文本[]转换为uuid
SELECT c.name FROM cars c
LEFT JOIN location_orders_cars loc ON loc.car_id = c.id
WHERE loc.user_id = ANY($1::uuid) AND loc.location_orders_id = $2 AND loc.is_back = NULL
LIMIT 10;
$1 = 上述 UUID 数组
2美元=355
我在这里做错了什么?
除了您遇到的错误之外,您还遇到了一些问题。
首先,谓词
loc.is_back = NULL
永远不会为真。您不能将逻辑/算术运算符与 一起使用;即使谓词不为真,null
它们也始终会返回;您需要使用 这种情况。null
null = null
loc.is_back IS NULL
其次,在 Postgres 中,双引号表示标识符(表名、列名等)。数组值需要使用单引号。
现在说正题:你可以将 ANY 与数组一起使用,但如果需要强制转换数据类型则不行。你可以将 uuid 以 uuid[] 的形式传递。如果无法做到这一点,则需要解除数组的嵌套,然后强制转换各个值。例如(参见演示)
您需要将其转换为
uuid[]
notuuid
。而且
LEFT JOIN
从逻辑上讲,你的是一个INNER JOIN
,并且正如其他人提到的那样,你IS NULL
不需要= NULL
。如果您使用应用程序传递参数,那么我强烈建议您对其进行更改以使其
uuid[]
正确传递。