我有一张看起来像这样的表:
deals
id vendorid name
1 52 '25% Off'
2 34 '10% Off'
-
vendors
id name
52 'Walmart'
34 'Home Depot'
我正在尝试搜索同时根据供应商ID进行搜索的数据库。
我能够在查询中获取供应商数据:
SELECT *,
(SELECT json_agg(vendors.*) FROM vendors WHERE deals.vendorid = vendors.id) as vendor
FROM deals
现在我想添加一个搜索,这是我尝试过的东西
SELECT *,
(SELECT json_agg(vendors.*) FROM vendors WHERE deals.vendorid = vendors.id) as vendor
FROM deals
WHERE vendor.name ILIKE '%wal%'
在上面的示例中,用户将开始搜索walmart
,但是它表示vendor.name列不存在,执行此操作的正确方法是什么?
我期望从上述查询获得的输出是:
[
{
id: 1,
vendorid: 52,
name: '25% Off',
vendor: [
{
id: 52,
name: 'Walmart'
}
]
}
]
答案 0 :(得分:2)
我能够通过使用它来完成它。
SELECT
*,
(SELECT json_agg(vendors.*) FROM vendors WHERE deals.vendorid = vendors.id) as vendor
FROM
deals
where (SELECT json_agg(vendors.*) FROM vendors WHERE deals.vendorid = vendors.id).name ILIKE '%wal%'
它非常难看,但完成了工作。我对postgree并不熟悉,但你可以以某种方式将它存储在一个变量中。
答案 1 :(得分:1)
您需要的查询
drop table if exists deals;
drop table if exists vendors;
create table if not exists deals(
id serial,
vendorid int not null,
name varchar not null
);
create table if not exists vendors(
id serial,
name varchar not null
);
insert into deals values
(1,52,'25% off'),
(2,34,'10% off');
insert into vendors values
(52,'Walmart'),
(34,'Home Depot');
select
d.id,
d.vendorid,
v.name,
json_agg(v.*)
from
vendors v
left join
deals d on d.vendorid = v.id
where
--v.id=52 and
v.name ILIKE '%wal%'
group by
d.id,
d.vendorid,
v.name;
如果您运行的是9.3+版本的postgres,则可以使用postgres提供的强大功能:the full text search
检查其工作原理here
享受postgres的力量。