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
中有特殊价格时才会显示数据。它省略了没有特殊价格和只有常规价格的任何数据。我不知道如何解决这个问题。如何以及在何处添加条件语句或类似语句
如果有固定价格,但没有特价,则显示固定价格,0表示特价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
在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