如何在SQL中多次关联一个表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL中多次关联一个表?相关的知识,希望对你有一定的参考价值。

我想关联两个表和一个关联表。这些表是:Person的主键为id_personActivity的主键为id_activity和一个与前两个表相关的表:Activity_Person包含主键和外键id_activityid_person

使用旧的JOIN格式关联此表将起作用:

select * from activity, person, activity_person
where activity.id_activity = activity_person.id_activity and person.id_person = activity_person.id_person;

这将显示每个人参加的活动。

但是现在我正在学习JOIN,但我不知道关联出现两次的表(Activity_Person)的正确格式是什么。

我已经尝试过:

select * from 
person inner join activity_person on person.id_person = activity_person.id_person,
activity inner join activity_person on activity.id_activity = activity_person.id_activity;

但出现以下错误:

不是唯一的表格/别名:'activity_person'

什么是正确的格式?

提前感谢。

答案

您在这里不需要两次activity_person。刚做

select *
    from person
    inner join activity_person on person.id_person = activity_person.id_person
    inner join activity on activity.id_activity = activity_person.id_activity;
另一答案

我认为您只需要两个联接:

select *
from person p inner join
     activity_person ap
     on p.id_person = ap.id_person inner join
     activity a
     on a.id_activity = ap.id_activity;

我不确定您为什么要在查询中重复activity_person

还要注意,表别名使查询更易于编写和阅读。

另一答案

您的语法不正确。

select * from activity, person, activity_person
where activity.id_activity = activity_person.id_activity
      and person.id_person = activity_person.id_person;

等效于:

select *
from person
inner join activity_person
on person.id_person = activity_person.id_person -- <- remove the comma there
inner join activity
on activity.id_activity = activity_person.id_activity;

基本上,语法是这样的:

SELECT <the fields to select>
FROM <table name>
JOIN <table to join>
ON <joining condition>
-- if you want to add another table :
JOIN <new table to join>
ON <joining condition>

以上是关于如何在SQL中多次关联一个表?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server数据库多表关联如何更新?

SQL 如何把两个表相关联的数据一同删除

laravel5 一对多关联 如何在页面上显示当前查询表有关表的某一字段

MySQL中如何在关联表中查询出其中一个外键不存在的数据?

sql mysql多表如何关联查询

SQL Server中 两个不同的数据库中的两张表如何关联?