我有以下PostgreSQL查询,它基本上返回基于硬编码产品名称的推荐列表(故意拼写错误)。
有4个表 -
Products_list
Column | Type | Modifiers
---------+------------------------+-----------
productid | integer | not null
name | character varying(400) | not null
year | character varying(100) | not null
分类
Column | Type | Modifiers
---------+-----------------------+-----------
productid | integer | not null
category | character varying(50) | not null
公司
Column | Type | Modifiers
---------+------------------------+------------
compid | integer | not null
c_name | character varying(250) | not null
Prod_com
Column | Type | Modifiers
---------+---------+-----------
productid | integer |
compid | integer |
用户输入拼写错误的产品名称,我会找到最匹配的产品名称,然后找到相应的类别和生产该产品的公司,并推荐由属于同一类别的同一公司生产的产品列表。
With
product_name as (
select name,productid
from products_list
group by name,productid
having levenshtein(name, 'Acryn')<=3
order by levenshtein(name, 'Acryn')
LIMIT 1 OFFSET 1
),
cat_name as(
select distinct category, c.productid productid
from product_name m, categories c
where m.productid=c.productid
),
com_name as(
select distinct c_name,a.compid compid
from companies a, prod_com pc, product_name m
where pc.productid = m.productid and pc.compid=a.compid
LIMIT 2)
select distinct name,year
from products_list pl, cat_name cn, com_name co, prod_com pc,categories c
where co.compid=pc.compid and c.category = cn.category and
c.productid = pl.productid and pl.productid = pc.productid
limit 10;
我班上的一名学生已经使用了类似的WITH子句方法,我的教授希望我以不同的方式做。我已经付出太多努力,我不知道如何更改查询结构,以便它与上述查询完成相同的工作。
有人可以帮助我重新构建此查询,以便它以相同的方式工作吗?感谢。
答案 0 :(得分:0)
WITH
foo as (select subquery)
select bar from foo
相当于
select bar from (select subquery) as foo
http://www.postgresql.org/docs/current/static/queries-with.html