外部连接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
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子句:用于限制数据,而不考虑内部或外部联接定义
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子句:用于限制数据,而不考虑内部或外部联接定义
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!曾经那还有别的解决办法吗?