我有一张桌子,里面装满了用户和他们的订单。它看起来像(name text, orders text[])
。我希望得到所有订购了我传入的特定商品的用户。我尝试过这样的查询:
SELECT name FROM customers WHERE ? = ANY (orders);
但这不起作用,因为?是我正在搜索的,Postgresql将其解释为一列,因此它不是有效的语法。
我想要在其orders数组中选择所有具有特定字符串(?)的用户。这个的正确语法是什么?
如果不重新安排数据库,有没有办法做到这一点?这是一个快速而肮脏的项目,所以没有必要担心可伸缩性。
答案 0 :(得分:1)
您需要使用contains运算符:
SELECT name
FROM customers
WHERE orders @> array[?]
如果你想把它放到一个函数中,你可以这样做:
create function get_cust(p_order text)
returns setof customers
as
$body$
select *
from customers
where orders @> array[p_order];
$body$
language sql;
SQLFiddle示例:http://sqlfiddle.com/#!15/23c9e0/1
但这实际上是一个糟糕的数据库设计。你应该花时间并正确地规范你的模型。正确地做到这一点甚至对于快速和肮脏的#34;数据库。大多数大型数据库都是以快速和肮脏的方式开始的。然后他们成长,成长。
一个聪明的人(不记得是谁)曾经说过:&#34; 如果值得做的话,也值得做好&#34; < / p>