【问题标题】:How can I use JOIN and CASE WHEN statement in this case (sqlite android)在这种情况下如何使用 JOIN 和 CASE WHEN 语句(sqlite android)
【发布时间】:2019-05-07 10:18:06
【问题描述】:

我有两张桌子)

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

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

如果“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"

【问题讨论】:

    标签: android sql database sqlite


    【解决方案1】:

    问题中的逻辑有点难以理解。但是,我认为您只是在寻找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在那里主要是看表中是否存在第二个公司。

    【讨论】:

    • 哇,谢谢!!!我根本不知道“合并”。谢谢..!! :) 你是天使!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    相关资源
    最近更新 更多