我想在同一张表(许可证)上进行左联接,该联接只给我在联接表中没有条目的许可证。但我没有任何结果:-(
这是查询(实际上很简单):
SELECT L1.licence_type, count(L1.id) as nb_licences FROM licence L1
left JOIN licence L2 ON (L2.licence_number = L1.licence_number )
where L2.season = L1.season and L2.league_id <> L1.league_id and L2.id IS NULL
GROUP BY L1.licence_type
这个想法是只获得同年联赛变化的执照(为简化查询,我故意省略了当年的条件)。
任何想法都会被理解。
根据https://stackoverflow.com/users/236345/alfabravo的建议,这是我的结构:
CREATE TABLE IF NOT EXISTS `licence` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` int(10) UNSIGNED DEFAULT NULL,
`association_id` int(10) UNSIGNED DEFAULT NULL,
`league_id` int(10) UNSIGNED DEFAULT NULL,
`season` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
`date_creation` datetime NOT NULL,
`licence_number` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`licence_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`active` tinyint(1) DEFAULT NULL,
`date_validation` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
)
关于licence_type(向https://stackoverflow.com/users/1144035/gordon-linoff转换),它只是一种类型,例如“竞争”或“培训”等。
答案 0 :(得分:0)
如果使用左联接,则不应在where子句中使用左联接表的列,这样可以用作内部联接,然后添加条件ON子句
SELECT L1.licence_type, count(L1.id) as nb_licences
FROM licence L1
left JOIN licence L2 ON (L2.licence_number = L1.licence_number )
AND L2.season = L1.season
and L2.league_id <> L1.league_id and L2.id IS NULL
GROUP BY L1.licence_type
答案 1 :(得分:0)
想法是仅获得同一年更改联赛的许可证
如果您想在给定年份更改许可证,我会认为“分组依据”:
select l.license_number, season
from license l
group by l.license_number, season
having min(league_id) <> max(league_id);
我不清楚license_type
与您的问题有什么关系。