基于PostgreSQL中的单独表数据执行搜索
我有一张这样的桌子:基于PostgreSQL中的单独表数据执行搜索,postgresql,Postgresql,我有一张这样的桌子: deals id vendorid name 1 52 '25% Off' 2 34 '10% Off' - 我正在尝试搜索数据库,该数据库也基于供应商id进行搜索 我可以这样做以获取查询中的供应商数据: SELECT *, (SELECT json_agg(vendors.*) FROM vendors WHERE deals.vendorid = vendors.id) as vendor F
deals
id vendorid name
1 52 '25% Off'
2 34 '10% Off'
-
我正在尝试搜索数据库,该数据库也基于供应商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'
}
]
}
]
您需要的查询
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提供的一个强大功能:
检查它是如何工作的
享受博士后的力量。我能用这个完成它
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不太熟悉,但您可以将其存储在变量中。您的
供应商
查询没有返回名为名称
的列,因此您不能在查询中使用它。为什么不在内部查询中使用它呢<代码>其中deals.vendorid=vendors.id和vendors.name类似“%wal%”…我正在尝试获取交易列表,json_agg函数将供应商数据附加到交易中,这样我就可以在不单独查询每笔交易的情况下输出它。确定,但是您知道,vendor.name
不存在,因为您没有返回该列,对吗?是的,我知道了,我不知道解决方法是什么,您期望的输出是什么。这将有助于澄清这样一个问题:在这种情况下,我如何将其用于另一个表中的数据?文档中没有提供这方面的示例。要使用另一个表中的数据,只需连接表,因为表之间有链接(vendorid)。我编辑了我的答案以添加您要查找的查询。对于全文搜索实现,必须更改where子句。如果你想用的话,我可以起草一些东西。这很有效,而且速度很快,是的,我想知道是否有办法浓缩它
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%'