基于主表内容的条件内连接

时间:2012-04-03 12:51:37

标签: mysql sql join

我正在尝试运行一个程序来检查优惠券在优惠券表中是否有效。

有一些简单的验证方面,例如优惠券是否已过期,但是,某些优惠券可能是基于客户按品牌或供应商购买特定产品的条件。

所以,我有优惠券表

    id    |     brand     |     supplier    |    value    etc

品牌表

   id     |      name       etc

和供应商表

   id     |     name     etc

如果凭证不是特定于品牌或供应商的,则凭证故事中的值为0

我已经尝试过这个Sql查询内部加入表格,但我没有得到任何结果,我假设这是因为我试图使用的凭证代码(id)不是特定于品牌或供应商?

SELECT *, brands.name as brandName, suppliers.name as supplierName  
    FROM `vouchers` 
    INNER JOIN brands on vouchers.brand = brands.id 
    INNER JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "'

如何编写此代码,以便表brands的加入取决于表brand中的值vouchers是否大于0(然后是供应商的类似值)< / p>

我已经看过这里并看到其他几个问题,但我恐怕不能完全理解能够将它们与我的情况联系起来的答案。

顺便使用MySQL数据库: - )

2 个答案:

答案 0 :(得分:1)

为什么不这样做LEFT JOIN而不是这样:

SELECT *, brands.name as brandName, suppliers.name as supplierName  
    FROM `vouchers` 
    LEFT JOIN brands on vouchers.brand = brands.id 
    LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "'

如果vouchersbrands

,则会返回suppliers的所有内容

答案 1 :(得分:0)

假设您只想退回有效的优惠券,请尝试:

SELECT *, brands.name as brandName, suppliers.name as supplierName  
FROM `vouchers` 
LEFT JOIN brands on vouchers.brand = brands.id 
LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
WHERE vouchers.id= '" & voucherCode & "' and
      vouchers.brand = coalesce(brands.id, 0) and
      vouchers.supplier = coalesce(suppliers.id, 0)