代码之家  ›  专栏  ›  技术社区  ›  Thomas Owens

跨表SQL查询的正确语法是什么?

  •  0
  • Thomas Owens  · 技术社区  · 16 年前

    现在,我有

    SELECT gp_id FROM gp.keywords 
    WHERE keyword_id = 15 
    AND (SELECT practice_link FROM gp.practices 
         WHERE practice_link IS NOT NULL 
         AND id = gp_id)
    

    这不提供语法错误,但是对于应该返回行的值,它只返回0行。

    我要做的是从gp.keywords获取gp-id,其中keywords table keywords列是一个特定的值,practice链接是practices表对应于我拥有的gp-id,该gp-id存储在该表的id列中。

    4 回复  |  直到 11 年前
        1
  •  3
  •   Cade Roux    16 年前

    我甚至不确定这是否是有效的SQL,所以我很惊讶它能正常工作:

    SELECT gp_id
    FROM gp.keywords
    WHERE keyword_id = 15
        AND (SELECT practice_link FROM gp.practices WHERE practice_link IS NOT NULL AND id = gp_id)
    

    改成这个怎么样:

    SELECT kw.gp_id, p.practice_link
    FROM gp.keywords AS kw
    INNER JOIN gp.practices AS p
        ON p.id = kw.gp_id
    WHERE kw.keyword_id = 15
    

    我会像其他例子一样避开隐式连接。它只会导致后来的眼泪。

        2
  •  1
  •   SquareCog    16 年前

    
    select k.gp_id 
    from gp.keywords as k,
         gp.practices as p
    where
    keyword_id=15
    and practice_link is not null
    and p.id=k.gp_id
    
        3
  •  0
  •   Guido    16 年前
    SELECT k.gp_id
    FROM gp.keywords k, gp.practices p
    WHERE 
       p.id = k.gp_id.AND
       k.keyword_id = 15 AND
       p.practice_link is not null
    
        4
  •  0
  •   Elie    16 年前
    SELECT g.gp_id, p.practice_link FROM gp.keywords g, gp.practices p 
    WHERE
    g.keyword_id = 15 AND p.practice_link IS NOT NULL AND p.id = g.gp_id