我的数据库中有2个表(事件和组织)。活动有4列:id,组织者,共同组织者和日期。
组织有3列:id,name,organisation_code。
organisation_code是一个唯一的密钥,事件表中的组织者和共同组织者引用了这个独特的密码。
我想选择在事件的日期范围内出现在组织者列和共同组织列中的所有组织。每个组织者只应列出一次,没有主要天气他们作为组织者和组织者出现,并按名称排序。组织者可以很容易地成为一个活动的合作者,并组织者参加另一个活动。我仍然只希望它们列出一次。
我的出现在两个不同的列上连续两次加入同一个表。但这需要我使用别名,并且别名阻止我能够按名称为两个连接排序,并按组织化码分组。我目前的代码如下:
SELECT date, t1.code, t1.name, t2.code, t2.name FROM $events_table
JOIN $organisations_table AS t1
ON $events_table.organiser = t1.organisation_code
JOIN $organisations_table AS t2
ON $events_table.coorganiser = t2.organisation_code
WHERE date > '2015-06-05' AND date < '2015-06-29'
GROUP BY t1.organisation_code
ORDER BY t1.name
答案 0 :(得分:0)
您可以使用IN
(如评论中所述)。但是,由于这类问题,两个LEFT JOIN
通常表现得更好:
SELECT e.date, COALESCE(t1.code, t2.code) as code,
COALESCE(t1.name, t2.name) as name
FROM $events_table e LEFT JOIN
$organisations_table t1
ON e.organiser = t1.organisation_code LEFT JOIN
$organisations_table t2
ON e.coorganiser = t2.organisation_code
WHERE e.date > '2015-06-05' AND e.date < '2015-06-29'
ORDER BY name
如果组织只出现一次,我不明白为什么group by
是必要的。