代码之家  ›  专栏  ›  技术社区  ›  Zombies

如何将结果只附加到较小的表中的一对多表联接起来?

  •  2
  • Zombies  · 技术社区  · 15 年前

    基本上我有一对多的桌子。我想将较大表的列附加到较小表的结果集。我将以一个结果集的大小相同的小表结束,但同样,从多方面的表中获取相关信息。

    一个要点是:虽然可以建立复合键(同样,它也不作为约束存在),但是多边表没有定义主键。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Quassnoi    15 年前

    因为在 t_large 可能对应于 t_small ,您需要选择要从中选择的内容 T-大 .

    这意味着您要么需要从 T-大 (如何?)或从多个记录中选择一个记录(哪个?).

    SELECT  s.*, SUM(l.value)
    FROM    t_small s
    LEFT JOIN
            t_large l
    ON      s.id = l.small
    

    SELECT  s.*, l.*
    FROM    t_small s
    LEFT JOIN
            t_large l
    ON      l.id = 
            (
            SELECT  MIN(id)
            FROM    t_large li
            WHERE   li.small = s.id
            )
    

    现在,想象一下这个表格布局:

    t_small
    
    id     value
    --     --
    1      Small 1
    2      Small 2
    
    
    t_large
    
    id     small_id  value
    --     --        --
    1      1         1
    2      1         4
    3      2         9
    4      2         16
    

    你能把你想看到的结果集作为查询的结果贴出来吗?

        2
  •  0
  •   Broam    15 年前

    这不是钥匙上的左连接吗?

    select * from small_table s left join large_table l on s.id = l.small_table_id

    小表中的每个记录,但大表中只有相关行。

    我错过了什么。请详细说明或提供洗涤后的样品数据。

    推荐文章