android - 在这种情况下如何使用 JOIN 和 CASE WHEN 语句(sqlite android)

标签 android sql database sqlite

我有两个表)

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"

情况是这样的。

  1. 公司可以合并 B公司并入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

如果每个用户的 companyId 都存在于带有“companySecondId”的公司表中,则显示 companySecondId 的 companyName

如果公司表中不存在每个用户的 companyId 以及“companySecondId”,则显示 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 主要是为了查看表中是否存在第二家公司。

关于android - 在这种情况下如何使用 JOIN 和 CASE WHEN 语句(sqlite android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56020402/

相关文章:

android - exoplayer 播放器错误无法连接到 hls 链接

Android 谷歌浏览器在锁屏应用程序后不启动

sql - 如何在数据库中存储级联类别

java - JDBC 准备语句语法错误

mysql - 如何编写强制外键的触发器

iOS 数据 - SQL 与 JSON - 哪种数据存储架构性能最高

android - 点击监听器以动态添加 imageview

Android BiometricPrompt DeviceCredentialHandler : onCreate: Executor and/or callback was null

mysql - 在 MySQL 中选择两个柱状和?

ios - 从 IOS 应用程序同时多次查询数据库导致崩溃