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_price
。 oc_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_product
和 oc_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
我想 select 从 oc_product, oc_product_description, oc_product_special
记录 product_id product_name actual_price discount_price
。 oc_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_product
和 oc_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