MySQL-如果值不存在,请使用另一个表

时间:2019-03-26 11:08:11

标签: php mysql subquery

我想做的是运行查询以显示所有产品 客户可能会获得折扣(登录时),或者仅使用standardTermsPricing:

表是: product要显示全部 制造商,productRange,网络代码,描述,供应商代码,priceExVat等

standardTermsPricing(不包含任何用户ID) supplier , supplierCode , Amount

supplierdiscounts supplier(supplierCode) , user , Amount

productdiscounts user ,产品(网络代码),金额“

我知道用户y127在某种程度上可以正常工作,但是如果我尝试使用一个z999,则不在表SupplierDiscounts或productDiscounts中,因此没有结果。

我当前的select语句不能真正起作用,它得到了一些结果,但没有得到我想要的...任何想法?

最终结果我正在使用PHP mysqli_query将结果循环显示给客户并导出CSV文件-但这是另一个问题!

非常感谢,伊恩

SELECT  
p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat, 
stp.amount 'standard discount amount', 
sd.amount 'supplier discount amount',
pd.amount 'product discount amount',
sd.user
FROM
products p
  JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode 
  JOIN supplierdiscounts sd ON p.supplierCode = sd.supplier 
  JOIN productDiscounts pd ON p.webcode = pd.product  
  WHERE  sd.user = 'Y127'


2 个答案:

答案 0 :(得分:0)

JOININNER JOIN相同,因此仅返回匹配的组合。如果您希望所有行,并且在折扣表中没有匹配的行时,也需要例如LEFT JOIN

...
FROM 
    products p
INNER JOIN standardTermsPricing stp 
  ON p.supplierCode  =  stp.supplierCode 
LEFT JOIN supplierdiscounts sd 
  ON p.supplierCode = sd.supplier 
LEFT JOIN productDiscounts pd 
  ON p.webcode = pd.product  
WHERE sd.user = 'Y127'

答案 1 :(得分:0)

修复了该问题,非常感谢-数据库中有一些重复的产品。

SELECT 
p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat,
sd.amount sdamount,
pd.amount pdamount,
stp.amount stpamount
FROM products p
INNER JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode 
LEFT JOIN supplierdiscounts sd ON p.supplierCode = sd.supplier  AND sd.user = 'C456' 
LEFT JOIN productDiscounts pd ON p.webcode = pd.product   AND sd.user = 'C456' 
WHERE sd.user = 'C456' 
UNION
SELECT 
  p.name,  
p.manufacturer, 
p.productRange, 
p.webcode, 
p.description, 
p.supplierCode, 
p.priceExVat,
NULL,
NULL,
stp.amount stpamount
FROM products p
INNER JOIN standardTermsPricing stp ON p.supplierCode  =  stp.supplierCode