【问题标题】:SQL query to have separate column with two joins relationSQL查询具有具有两个连接关系的单独列
【发布时间】:2021-01-15 02:51:20
【问题描述】:

我有一个有两个连接列的表:

外借表

id | specificmaterialinstance_id | ma​​terial_id

结果集总是在同一行中返回特定值和 generic_object

例如:使用两种材料和一种特定对象的贷款

| 211 | 3 | 4

| 211 | 3 | 20

如何在结果中有单独的对象并通过不同数量的列(2 个用于材料,1 个用于特定实例):

| 211 | 3 |空

| 211 |空 | 4

| 211 |空 | 20

这是查询:

SELECT loan.id,
       loan.status, loan.specificmaterialinstance_id, loan.material_id

FROM (SELECT * FROM "main"."core_loan" as l 
    
     LEFT JOIN "main"."core_loan_specific_materials" as ls ON ls.loan_id = l.id
    
      LEFT JOIN "main"."core_loangenericitem" as lg ON lg.loan_id = l.id
    
     WHERE ("due_date" < date("now",'-1 day')) ) AS loan

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。您的问题引用了一张表,但您的查询引用了三张表,这令人困惑。

标签: sql sqlite join duplicates


【解决方案1】:

试试这个

select id, specificmaterialinstance_id, NULL material_id
from loan
union all
select id, NULL, material_id 
from loan;

【讨论】:

    【解决方案2】:

    您可以将"main"."core_loan" 单独加入每个表,然后使用UNION ALL 组合结果:

    SELECT l.id, ls.specificmaterialinstance_id, null material_id     
    FROM "main"."core_loan" as l
    LEFT JOIN "main"."core_loan_specific_materials" as ls ON ls.loan_id = l.id
    WHERE (l."due_date" < date("now",'-1 day'))
    UNION ALL
    SELECT l.id, null, lg.material_id    
    FROM "main"."core_loan" as l
    LEFT JOIN "main"."core_loangenericitem" as lg ON lg.loan_id = l.id
    WHERE (l."due_date" < date("now",'-1 day')) 
    

    我假设"due_date" 是表"main"."core_loan" 中的一列。

    【讨论】:

    • 是的,到期日期是贷款表的一列。我已经尝试过您的解决方案,但结果中的列数不同(材料为 2,特定为 1)
    • @user5329403 两个联合查询都返回 3 列。我错过了我现在编辑的第一个查询中的别名。
    • 好的,这就是我想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多