首页 > 解决方案 > PostgreSQL:这个查询可以更短吗?

问题描述

表“产品”

ID 产品名称 产品描述
1. 这是 foo desc
2. 酒吧 条形图
3 粘性物。 好描述

连接表“ingredient_product”

ID product_id 成分ID
1 1 1
2 1 2
3 2 2
4 2 3
5 3 5
6 3 4

表“成分”

ID 成分名称
1 苹果
2
3 牛肉
4 鸡油
5 燕麦
6 豌豆纤维
const {keyword} = req.query

const response = await pool.query(
      'SELECT product.name AS product_name FROM product 
       JOIN ingredient_product ON ingredient_product.product_id = product.id 
       JOIN ingredient ON ingredient_product.ingredient_id = ingredient.id 
       WHERE ingredient.name ILIKE $1',
       [`%${keyword}%`]
    );

嗨,我对 sql 很陌生,我的查询似乎总是很长。

所以我一直想知道这个查询(上面)是否可以缩短?或者有没有更好的写法?

谢谢!

标签: postgresql

解决方案


没有概念上更简单的方法可以做到这一点。你可以做一些语法上的简化——JOIN你可以SELECT从多个表中而不是使用 s,然后用WHERE-conditions 过滤它们:

SELECT product.name AS product_name
FROM product, ingredient_product, ingredient
WHERE
  ingredient.name ILIKE $1
  AND
  ingredient_product.product_id = product.id
  AND
  ingredient_product.ingredient_id = ingredient.id

我能想象的最短查询(以字符长度计)是这样的:

SELECT p.name AS product_name FROM product p, ingredient_product b, ingredient i WHERE i.name ILIKE $1 AND b.product_id = product.id AND b.ingredient_id = ingredient.id

在记录级别上,所有这些都将做同样的事情。


推荐阅读