0

假设我有一个名为 Appointments 的表,另一个名为 Clients 的表和一个名为 ClientsAppointments 的连接表,它关联了上述两个表。这用于客户端可以有多个约会,并且多个客户端可以参加同一个约会(nn 关系)的场景。

我想列出约会,其中“客户”字段是与该约会相关的所有客户的数组。到目前为止我已经尝试过:

    SELECT * FROM Appointments a
    INNER JOIN ClientsAppointments ca ON ca.IdAppointment = a.IdAppointment
    INNER JOIN Clients c ON c.IdClient = ca.IdClient

这当然行不通。它给了我一份与他们拥有的每个客户重复的约会清单。然后在 PHP 中我会处理它们来实现这一点。这种方式似乎比进行多次查询更有效,因为每次约会通常只有一个客户。

表模式(这些不是实际的表,但为了说明情况而进行了简化):

    Appointment(
            INT idAppointment,
            DATETIME start,
            DATETIME end)

    Clients(
            INT idClient,
            VARCHAR name)

    ClientsAppointments(
            INT idAppointment,
            INT idClient)
4

2 回答 2

0

尝试使用LEFT OUTER JOIN

SELECT a.*,c.Name FROM ClientsAppointments ca
LEFT OUTER JOIN Appointments a ON ca.IdAppointment = a.IdAppointment
LEFT OUTER JOIN Clients c ON ca.IdClient = c.IdClient
于 2012-08-08T07:18:48.820 回答
0

如果您使用 MySQL 作为数据库,请尝试使用 GROUP_CONCAT:

SELECT a.IdAppointment,GROUP_CONCAT(CAST(ca.IdClient AS CHAR) SEPARATOR ',')  FROM Appointments a
INNER JOIN ClientsAppointments ca ON ca.IdAppointment = a.IdAppointment
group by a.IdAppointment
于 2012-08-08T07:42:16.650 回答