Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Inner Join - Fatal编程技术网

使用映射表进行SQL连接

使用映射表进行SQL连接,sql,inner-join,Sql,Inner Join,我有三张桌子: COLLECTION PERSON PERSON_COLLECTION 其中PERSON_COLLECTION是一个映射表id | PERSON_id | COLLECTION_id 现在我想选择集合中的所有条目,并按person.name对它们进行排序 我是否必须先将单独的表与映射表连接起来,然后再对结果进行连接?连接顺序不会破坏它,但取决于您使用的sql产品可能会影响性能。 SELECT c.*, p.Name FROM Collection c

我有三张桌子:

COLLECTION 
PERSON 
PERSON_COLLECTION
其中
PERSON_COLLECTION
是一个映射表
id | PERSON_id | COLLECTION_id

现在我想选择集合中的所有条目,并按
person.name
对它们进行排序


我是否必须先将单独的表与映射表连接起来,然后再对结果进行连接?

连接顺序不会破坏它,但取决于您使用的sql产品可能会影响性能。
SELECT
    c.*,
    p.Name
FROM
    Collection c
    JOIN Person_Collection pc ON pc.collection_id = c.id
    JOIN Person p ON p.id = pc.person_id
ORDER BY p.Name

您需要决定是要同时使用表中的所有记录,还是只使用具有匹配映射项的记录,这将更改您需要使用的联接类型。

如果不使用表架构,则不确定,但我的目标是:

SELECT
c.*,
p.*

FROM
Person_Collection pc
LEFT JOIN Collection c
ON pc.collection_id = c.id
LEFT JOIN Person p
ON pc.person_id = p.id

ORDER BY p.name

您可以显示您的表模式吗?请更新您的问题。同时指出表之间的任何引用完整性。作为连接表的一般*规则,请从最大的/数据表开始,然后逐步连接到最小的/映射表。此外,在左联接之前执行内部联接*注:一般规则。