sqlite INNER JOIN только если данные - PullRequest
0 голосов
/ 12 мая 2018

Пример с таблицами:

Акция (idPromo, nameUser)

Компания (idCompany, nameCompany)

ПромоКомпания (idPromo, idCompany)

Iпопробуйте получить только один запрос, все рекламные акции, в которых есть компания (например, idCompany = 1) ИЛИ, в которых есть 0 компании.

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

Пример:

Promo[{
    idPromo:1
    namePromo:"promo test"
    },
    {
    idPromo:2
    namePromo:"promo test 2"
    }]
Company[{
    idCompany:10
    nameCompany:"CompanyPloof"
},{
    idCompany:12
    nameCompany:"CompanyPaf"
}
]
PromoCompany[{
    idPromo:1
    idCompany:10
},{
    idPromo:1
    idCompany:12
}
    ]

Если моей компанией является CompanyPloof, то рекламные акции - idPromo 1 и 2 * 1016.*

Если моей компанией является CompanyPaf, промо-акции будут idPromo 2 (потому что не ограничены)

1 Ответ

0 голосов
/ 12 мая 2018

Хммм. , , это звучит как два условия:

select p.*
from promotions p
where exists (select 1 from promocompany pc where pc.idpromo = p.idpromo and p.idcompany = 1) or
      not exists (select 1 from promocompany pc where pc.idpromo = p.idpromo);

Я бы предложил небольшое изменение вашей модели данных. Добавьте в promotions флажок, указывающий, доступна ли акция для всех компаний или она ограничена. Необходимость поиска в таблице немного неловкая - и потенциально запутанная. Добавление одной строки в таблицу может сделать недействительной акцию для всех остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...