android - 在这种情况下如何使用 JOIN 和 CASE WHEN 语句(sqlite android)
问题描述
我有两张桌子)
CREATE TABLE `Company` (
`companyName` TEXT,
`status` TEXT,
`extra` TEXT,
`companyId` TEXT,
`companySecondId` TEXT
CREATE TABLE `UserList` (
`userName` TEXT,
`companyId` TEXT
);
我想用 companyId 加入 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"
这是情况。
公司可以合并 CompanyB 合并到 A
公司可能破产 公司 C 已合并到公司 E,但公司 E 已破产。
在这种情况下,我像这样加入
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
如果每个用户的 companyId 存在于 Company Table 中并带有“companySecondId”,则显示 companySecondId 的 companyName
如果“companySecondId”的公司表中不存在每个用户的 companyId,则显示 companyId 的 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"
解决方案
问题中的逻辑有点难以理解。但是,我认为您只是在寻找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
主要是看表中是否存在第二家公司。
推荐阅读
- linux - 如何使用 mmcli(ModemManager DBus 驱动的 Linux 守护程序 API)将 sim 号码列入白名单
- rotation - 用鼠标拖动、调整大小和旋转
- docker - 为什么我不能附加到 mariadb 的 docker 容器?
- postgresql - postgres 11:禁止缓存表
- python - ValueError:形状 (None, 1) 和 (None, 5) 不兼容
- java - 在 Java 中打印出带有时区的本地化日期
- php - PHP-Swoole 错误 accept() failed, Error: Too many open files[24]
- java - 多对多中的联合表未更新
- java - 为什么我的基本身份验证凭据不被接受?
- python - 如何在 Selenium Python 中定位样式元素?