mysql 如何对连接表中的所有供应商取价

mftmpeh8  于 2023-01-01  发布在  Mysql
关注(0)|答案(2)|浏览(135)

我有以下查询

SELECT
    price
FROM prices
left join suppliers s on prices.id_supplier = s.id_supplier
AND prices.id_product = 57;

表结构如下:
供应商:
| id_供应商|姓名|
| - ------| - ------|
| 1个|供应商1|
| 第二章|供应商2|
| 三个|供应商3|
价格
| id_pk| id_产品|日期|价格|id_供应商|
| - ------| - ------| - ------| - ------| - ------|
| 1个|五十七|二〇二二年十二月二十九日|四点九九|1个|
| 第二章|五十七|二〇二二年十二月二十九日|六点九九|第二章|
因此,基于上面的数据,我希望创建一个查询,获取给定产品的所有供应商的所有价格,即使是供应商3(我们没有其价格,在这种情况下,它应该返回0)
输出我要求如下:
| id_供应商|价格|
| - ------| - ------|
| 1个|四点九九|
| 第二章|六点九九|
| 三个|无|
这可能吗?

7gs2gvoe

7gs2gvoe1#

表的连接顺序错误。
您需要supplier中的所有行,所以这是LEFT表。

SELECT
  s.*,
  COALESCE(p.price, 0)
FROM
  suppliers   s
LEFT JOIN
  prices      p
    ON  p.id_supplier = s.id_supplier
    AND p.id_product  = 57
nkoocmlb

nkoocmlb2#

SELECT 
      CASE WHEN price = 57 THEN 57 
      WHEN s.id_supplier IS NULL THEN 0 
      END AS price 
FROM prices
LEFT JOIN suppliers s on prices.id_supplier = s.id_supplier

如果我正确理解了你的问题,那么这应该可以工作。使用case语句会得到你的价格为57时,价格是57,当id_supplier是空的,它会分配0到该行。让我知道这是否有帮助。
编辑:

SELECT 
      s.id_supplier,
      CASE WHEN price = 57 THEN 57 
      WHEN price IS NULL THEN 0 
      END AS price
FROM prices
RIGHT JOIN suppliers s on prices.id_supplier = s.id_supplier

此查询将选择价格为57或空的所有供应商。

相关问题