Условное внутреннее объединение на основе содержимого первичной таблицы - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь запустить программу, чтобы проверить, действительны ли ваучеры в таблице ваучеров.

Существует несколько простых аспектов проверки, например, истек ли срок действия ваучера, но также некоторыеваучеры могут быть условными в зависимости от того, покупатель покупает конкретную продукцию по бренду или поставщику.

Итак, у меня есть таблица ваучеров

    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 (и то же самое для поставщиков)

Я посмотрел здесьи посмотретьопубликовано несколько других вопросов, но, боюсь, я не до конца понимаю ответы, чтобы связать их с моей ситуацией.

Кстати, используя базу данных MySQL: -)

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Почему бы вам просто не сделать 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 & "'

Это вернет все vouchers независимо от того, есть ли у них brands или suppliers

0 голосов
/ 03 апреля 2012

Если вы хотите вернуть только действительные ваучеры, попробуйте:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...