Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
外部连接SQL表?_Sql_Sql Server_Database - Fatal编程技术网

外部连接SQL表?

外部连接SQL表?,sql,sql-server,database,Sql,Sql Server,Database,数据库中有三个表- 活动id为、活动类型为的活动表 具有类别id、类别名称的类别表 具有活动标识和类别标识之间映射的链接表 我需要编写select语句以获取以下数据: activity_id, activity_type, Category_name. 问题是某些活动id在链接表中没有条目 如果我写: select a.activity_id, a.activity_type, c.category_name from activity a, category c, link l wher

数据库中有三个表-

  • 活动id为、活动类型为的活动表
  • 具有类别id、类别名称的类别表
  • 具有活动标识和类别标识之间映射的链接表
  • 我需要编写select语句以获取以下数据:

    activity_id, activity_type, Category_name.
    
    问题是某些活动id在链接表中没有条目

    如果我写:

    select a.activity_id, a.activity_type, c.category_name 
    from activity a, category c, link l 
    where a.activity_id = l.activity_id and c.category_id = l.category_id
    
    然后,我不会获取链接表中不存在的活动ID的数据。 我需要获取所有活动的数据,对于那些没有任何category_id链接的活动,category_name的值为空或null

    请帮帮我


    另外,我正在使用MS SQL Server DB

    我相信您正在为活动表寻找一个
    左外部联接
    ,以返回所有行

    SELECT
    a.activity_id, a.activity_type, c.category_name 
    FROM activity a
    LEFT OUTER JOIN link l 
    ON a.activity_id = l.activity_id
    LEFT OUTER JOIN category c
    ON c.category_id = l.category_id; 
    

    我相信您正在为活动表寻找一个
    左外部联接
    ,以返回所有行

    SELECT
    a.activity_id, a.activity_type, c.category_name 
    FROM activity a
    LEFT OUTER JOIN link l 
    ON a.activity_id = l.activity_id
    LEFT OUTER JOIN category c
    ON c.category_id = l.category_id; 
    

    应使用适当的显式联接:

    select a.activity_id, a.activity_type, c.category_name 
    from activity a
    LEFT JOIN link l 
    ON a.activity_id = l.activity_id 
    LEFT JOIN category c
    ON l.category_id = c.category_id
    

    应使用适当的显式联接:

    select a.activity_id, a.activity_type, c.category_name 
    from activity a
    LEFT JOIN link l 
    ON a.activity_id = l.activity_id 
    LEFT JOIN category c
    ON l.category_id = c.category_id
    
    那怎么办

     select a.activity_id, a.activity_type, c.category_name  from category c
     left join link l on c.category_id = l.category_id
     left join activity a on l.activity_id = a.activity_id
    
    实际上,第一个连接看起来可能是一个
    内部连接
    ,因为您没有提到那里可能缺少一些元素

    怎么办

     select a.activity_id, a.activity_type, c.category_name  from category c
     left join link l on c.category_id = l.category_id
     left join activity a on l.activity_id = a.activity_id
    

    实际上,第一个连接似乎是一个
    内部连接
    ,因为您没有提到其中可能缺少一些元素

    如果编写这种类型的逻辑将是您日常职责的一部分,我强烈建议您对连接进行一些研究,包括连接和where子句之间的交互。联接和where子句组合在一起构成了查询编写的主干,而与检索数据所使用的技术无关

    需要了解的最关键的连接信息:

    • 左外部联接:从“左”表和联接表中存在的任何记录中检索所有信息
    • 内部联接:仅检索两个表中存在的记录
    • Where子句:用于限制数据,而不考虑内部或外部联接定义
    在您发布的示例中,where子句将总体数据限制为所有3个表中存在的行。用适当的连接逻辑替换where子句可以实现以下目的:

    select a.activity_id, a.activity_type, c.category_name 
    from activity a 
         left outer join link l --return all activity rows regardless of whether the link exists 
              on a.activity_id = l.activity_id
    left outer join category c --return all activity rows regardless of whether the link exists  
              on c.category_id = l.category_id
    

    祝你好运

    如果编写这种类型的逻辑将是您日常职责的一部分,我强烈建议您对连接进行一些研究,包括连接和where子句之间的交互。联接和where子句组合在一起构成了查询编写的主干,而与检索数据所使用的技术无关

    需要了解的最关键的连接信息:

    • 左外部联接:从“左”表和联接表中存在的任何记录中检索所有信息
    • 内部联接:仅检索两个表中存在的记录
    • Where子句:用于限制数据,而不考虑内部或外部联接定义
    在您发布的示例中,where子句将总体数据限制为所有3个表中存在的行。用适当的连接逻辑替换where子句可以实现以下目的:

    select a.activity_id, a.activity_type, c.category_name 
    from activity a 
         left outer join link l --return all activity rows regardless of whether the link exists 
              on a.activity_id = l.activity_id
    left outer join category c --return all activity rows regardless of whether the link exists  
              on c.category_id = l.category_id
    

    祝你好运

    不要使用那些老式的隐式
    JOIN
    s!曾经那么还有其他解决方案吗?不要使用那些老式的隐式
    JOIN
    s!曾经那还有别的解决办法吗?