Как я могу использовать оператор JOIN и CASE WHEN в этом случае (sqlite android) - PullRequest
1 голос
/ 07 мая 2019

у меня два стола)

CREATE TABLE `Company` (
    `companyName`   TEXT,
    `status`    TEXT,
    `extra` TEXT,
    `companyId` TEXT,
    `companySecondId`   TEXT
CREATE TABLE `UserList` (
    `userName`  TEXT,
    `companyId` TEXT
);

И я хотел бы присоединиться к UserList и Company с идентификатором компании

Пример данных)

companyName     status  extra  companyId  companySecondId
"CompanyA"  "456"   "456"   "A" "A"
"CompanyB"  "789"   "789"   "B" "A"
"CompanyC"  "123"   "123"   "C" "E"
"CompanyD"  "111"   "111"   "D" "D"
UserName  CompanyId
"UserA" "A"
"UserB" "B"
"UserC" "C"
"UserD" "D"

Вот ситуация.

  1. Компания может объединиться CompanyB объединяется с A

  2. Компания может обанкротиться CompanyC была объединена с CompanyE, но CompanyE обанкротилась.

В этом случае я присоединяюсь вот так

select UserList.*, t1.companyName
from UserList 
inner join 
(select companyId, 
(case when exists (select * from Company where a.companySecondId = companyId) 
then (select companyName from Company where a.companySecondId = companyId) 
else (select companyName from Company where a.companyId = companyId) 
end) as companyName 
from Company a) as t1 
on UserList.companyId = t1.companyId

Если идентификатор компании каждого пользователя существует в таблице компаний с именем "companySecondId", тогда показывать название компании companySecondId

Если идентификатор компании каждого пользователя не существует в Таблице компаний с «companySecondId», вместо этого укажите companyNid companyName вместо companySecondId

Так что я могу получить такой результат

userName  companyId  companyName
"UserA" "A" "CompanyA"
"UserB" "B" "CompanyA"
"UserC" "C" "CompanyC"
"UserD" "D" "CompanyD"

Но я бы хотел показать со статусом и дополнительным, как это но в случае, когда существуют ~ тогда ~ еще только вернуть один столбец Как я могу сделать это в SQLite ??

userName  companyId  companyName  status  extra
"UserA"     "A"     "CompanyA"        "456"    "456"
"UserB"     "B"     "CompanyA"        "456"    "456"
"UserC"     "C"     "CompanyC"        "123"    "123"
"UserD"     "D"     "CompanyD"        "111"    "111"

1 Ответ

0 голосов
/ 07 мая 2019

Логика в вопросе немного сложна для подражания.Тем не менее, я думаю, что вы просто ищете left join:

select ul.userName,
       coalesce(c2.companyId, c.companyId) as companyId,
       coalesce(c2.status, c.status) as status,
       coalesce(c2.extra, c.extra) as extra
from userlist ul left join
     company c
     on ul.companyId = c.companyId left join
     company c2
     on c2.companyId = c.companySecondId;

Вторая left join предназначена главным образом для того, чтобы узнать, существует ли вторая таблица в таблице.

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