Select 在 mysql 中使用内连接和外连接从 3 个表中记录

Select record from 3 tables using inner and outer join in mysql

我想 select 从 oc_product, oc_product_description, oc_product_special 记录 product_id product_name actual_price discount_priceoc_product_special table 包含产品的折扣价,但某些产品没有折扣,即 discount_price=0.0000。我想 select 所有 40 种产品及其 discount_price 并且如果 discount_price=0.0000 则在该行中打印 NULL。

我试过的查询是:

SELECT oc_product_description.product_id,oc_product_description.name product_name, oc_product.price actual_price, oc_product_special.price discount_price 
FROM oc_product 
INNER JOIN oc_product_description 
RIGHT OUTER JOIN oc_product_special ON oc_product_description.product_id = oc_product.product_id = oc_product_special.product_id`

它returns我输出错了

product_id  product_name    actual_price    discount_price
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            0.0000
  NULL            NULL             NULL            1950.0000
  NULL            NULL             NULL            3850.0000
  NULL            NULL             NULL            7500.0000

我希望得到这样的输出:

product_id  product_name    actual_price    discount_price
  1               yyyy             1000.0000      0.0000
  2               xxxx             2000.0000      500.0000

几件事;

你在 oc_productoc_product_description 之间的连接条件应该在它们之间的内部连接上,而不是在与第三个 table;

的外部连接上
INNER JOIN oc_product_description 
  ON oc_product.product_id = oc_product_description.product_id

在这种情况下,外部联接的条件应仅包含 table;

的条件
RIGHT OUTER JOIN oc_product_special 
  ON oc_product.product_id = oc_product_special.product_id

此外,由于您可能总是希望商品的描述始终存在,并且特价是可选的,因此您可能应该使用 LEFT JOIN 而不是 RIGHT JOIN

这将导致最终查询类似于;

SELECT oc_product_description.product_id,oc_product_description.name product_name, 
       oc_product.price actual_price, oc_product_special.price discount_price 
FROM oc_product 
INNER JOIN oc_product_description 
  ON oc_product.product_id = oc_product_description.product_id
LEFT OUTER JOIN oc_product_special 
  ON oc_product.product_id = oc_product_special.product_id