Mysql:无法弄清楚此LEFT JOIN查询出了什么问题

时间:2018-11-26 17:00:10

标签: mysql sql left-join

我想在同一张表(许可证)上进行左联接,该联接只给我在联接表中没有条目的许可证。但我没有任何结果:-(

这是查询(实际上很简单):

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转换),它只是一种类型,例如“竞争”或“培训”等。

2 个答案:

答案 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与您的问题有什么关系。