假设我有一个名为Appointments的表,另一个名为Clients的表和一个名为ClientsAppointments的连接表,它与前面提到的两个相关联。这用于客户可以有多个约会的场景,并且多个客户可以参加同一个约会(n-n关系)。
我想列出约会,其中“客户”字段是与该约会相关的所有客户的数组。到目前为止我尝试过的:
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)
答案 0 :(得分: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
答案 1 :(得分: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