我想做的是运行查询以显示所有产品 客户可能会获得折扣(登录时),或者仅使用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'
答案 0 :(得分:0)
JOIN
与INNER 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