分享
三行代码  ›  专栏  ›  技术社区  ›  cvzx

其中col1 from tab1和col1 from tab2 in select from tab3

  •  0
  • cvzx  · 技术社区  · 3 天前

    我想从表A和表B中获取一些记录,它们没有任何公共记录,但我的选择取决于表C,表C有A和B的键,例如: 我有三张桌子:A、B和C,差不多是这样的:

          A
    +----+-------+
    | ID | NAME  |
    +----+-------+
    |  1 | nameA |
    +----+-------+
    
    
         B
    +----+-------+
    | ID | NAME  |
    +----+-------+
    |  1 | nameB |
    +----+-------+
    
    
    
            C
    +-----+-----+-------+
    | IDA | IDB | NAMEC |
    +-----+-----+-------+
    |   1 |   1 | nameC |
    +-----+-----+-------+
    

    +-------+-------+
    | NameA | NameB |
    +-------+-------+
    | nameA | nameB |
    +-------+-------+
    

    所以我试着:

     select a.name, b.name
        from tableA a, tableB b
        join (select idA, idB
        from   tableC where nameC='nameC') tmp
        on tmp.idA=a.id and tmp.idB=b.id
    

    1 回复  |  直到 3 天前
        1
  •  2
  •   Gordon Linoff    3 天前

    这只是两个连接和筛选:

    select a.name as nameA, b.name as nameB
    from tableC c join
         tableA a
         on c.idA = a.id join
         tableB b
         on c.idB = b.id
    where c.nameC = 'nameC';
    

    您的代码无法工作,因为您正在将陈旧的连接语法(逗号)与适当的、显式的, 标准 ,可读 JOIN 从未 使用逗号。总是使用 加入

    代码不起作用的原因是逗号周围的作用域规则。这个 ON 子句不识别第一个表引用。