mysql查询中缺少数据,内部联接中需要条件语句

mysql查询中缺少数据,内部联接中需要条件语句,mysql,Mysql,在运行以下查询时,我遇到了丢失数据的问题。 有些产品具有特殊价格,存储在表oc\u product\u special中,有些产品具有常规价格,存储在表oc\u product中。 我发现只有在表oc\u product\u special中有特殊价格时才会显示数据。它省略了没有特殊价格和只有常规价格的任何数据。我不知道如何解决这个问题。如何以及在何处添加条件语句或类似语句 SELECT pd.name AS 'Product Name', p

在运行以下查询时,我遇到了丢失数据的问题。 有些产品具有特殊价格,存储在表
oc\u product\u special
中,有些产品具有常规价格,存储在表
oc\u product
中。
我发现只有在表
oc\u product\u special
中有特殊价格时才会显示数据。它省略了没有特殊价格和只有常规价格的任何数据。我不知道如何解决这个问题。如何以及在何处添加条件语句或类似语句

SELECT       
        pd.name AS 'Product Name', 
        p.model AS UPC,  
        p.quantity AS 'Quantity', 
        p.price AS 'Regular Price', 
        ps.price AS 'Special Price', 
        p.cost AS 'COST', 
        p.status AS 'Status'
FROM oc_product p
    INNER JOIN oc_product_description pd
        ON pd.product_id = p.product_id
    INNER JOIN oc_product_special ps
        ON ps.product_id = p.product_id
    INNER JOIN oc_manufacturer m
        ON p.manufacturer_id = m.manufacturer_id
    INNER JOIN oc_product_to_category p2c 
        ON p2c.product_id = p.product_id
    INNER JOIN oc_category c 
        ON c.category_id = p2c.category_id
    INNER JOIN oc_category_description cd 
        ON c.category_id = cd.category_id
WHERE 
      c.category_id = 37 OR c.parent_id = 37
GROUP BY pd.name ORDER BY m.name ASC 
如果有固定价格,但没有特价,则显示固定价格,0表示特价



在oc\u产品上使用左连接

SELECT COALESCE(pd.name, 'NA') AS 'Product Name', 
       p.model AS UPC,  
       p.quantity AS 'Quantity', 
       p.price AS 'Regular Price', 
       COALESCE(ps.price, 0.0) AS 'Special Price', 
       p.cost AS 'COST', 
       p.status AS 'Status'
FROM oc_product p
LEFT JOIN oc_product_description pd
    ON pd.product_id = p.product_id
LEFT JOIN oc_product_special ps
    ON ps.product_id = p.product_id
INNER JOIN oc_manufacturer m
    ON p.manufacturer_id = m.manufacturer_id
INNER JOIN oc_product_to_category p2c 
    ON p2c.product_id = p.product_id
INNER JOIN oc_category c 
    ON c.category_id = p2c.category_id
INNER JOIN oc_category_description cd 
    ON c.category_id = cd.category_id
WHERE c.category_id = 37 OR
      c.parent_id = 37
GROUP BY pd.name
ORDER BY m.name

内部联接si用于匹配值在您的情况下,某些内容不匹配,因此..使用左联接

使用
左联接
,即使记录与右侧的任何内容不匹配,也会保留联接左侧的记录:

说明:


左联接中
,当联接左侧的记录与右侧的任何记录不匹配时,右侧的列在结果集中都将显示为
NULL
。我在查询中使用了
COALESCE
函数,如果第一个参数为
NULL
,它将有条件地用第二个参数替换第一个参数。在这种情况下,如果
NULL
,则特价将替换为零。我还将其与产品名称一起使用,以防在某些情况下名称丢失。

谢谢。我学到了两件非常重要的事情,第一件是关于左连接,第二件是关于合并函数。这个解决了这个问题。非常感谢。
SELECT COALESCE(pd.name, 'NA') AS 'Product Name', 
       p.model AS UPC,  
       p.quantity AS 'Quantity', 
       p.price AS 'Regular Price', 
       COALESCE(ps.price, 0.0) AS 'Special Price', 
       p.cost AS 'COST', 
       p.status AS 'Status'
FROM oc_product p
LEFT JOIN oc_product_description pd
    ON pd.product_id = p.product_id
LEFT JOIN oc_product_special ps
    ON ps.product_id = p.product_id
INNER JOIN oc_manufacturer m
    ON p.manufacturer_id = m.manufacturer_id
INNER JOIN oc_product_to_category p2c 
    ON p2c.product_id = p.product_id
INNER JOIN oc_category c 
    ON c.category_id = p2c.category_id
INNER JOIN oc_category_description cd 
    ON c.category_id = cd.category_id
WHERE c.category_id = 37 OR
      c.parent_id = 37
GROUP BY pd.name
ORDER BY m.name