mysql:无法找出这个左连接查询有什么问题

xoefb8l8  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(331)

我想在同一个表(许可证)上执行左联接,该表只提供在联接表中没有条目的许可证。但我不能得到任何结果:-(
下面是一个查询(实际上很简单):

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`),
)

至于许可证类型https://stackoverflow.com/users/1144035/gordon-linoff),只是一种“竞赛”或“训练”之类的类型。。。

eaf3rand

eaf3rand1#

这样做的目的是在同一年里只获得改变联盟的许可证
如果您希望许可证在某一年内改变了联盟,我认为“group by”:

select l.license_number, season
from license l
group by l.license_number, season
having min(league_id) <> max(league_id);

我不清楚是什么 license_type 和你的问题有关。

mcdcgff0

mcdcgff02#

如果使用左联接,则不应在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

相关问题