[英]mariadb - LEFT OUTER JOIN
最近迁移了服务器,我发现了这个“错误”,我将mysql作为数据库,而我想要的(我不是SQL方面的专家)是通过1:N连接2个相关的表,例,
Table 1: Badges_Person
Table 2: Badges
徽章是带有徽章的表,并且Badges_Person包含一个类似(id_badge,id_person)的关系,容易吗? 好吧,这个SQL查询似乎总是可以正常工作:
SELECT id, nombre, descripcion, insignias.time, obtained
FROM insignias LEFT OUTER JOIN
(SELECT *, '1' as obtained
FROM insignias_user
WHERE insignias_user.username = 'Octal'
) as insignias_user_seleccionado
ON insignias.id = insignias_user_seleccionado.id_insignia;
该查询的输出是带有“获得”列(0或1)的徽章列表,该列表明用户“八度”是否具有该徽章。
所以...,现在,我将mariadb作为数据库,它返回一个不同的输出,其中所有行都标记为“获得” = 1。
我之所以来到这里,是因为据我所知,我已经放弃了所有可能的愚蠢错误。
我无法说出查询为什么不起作用。 这似乎是一个数据问题-所有行都匹配。
但是,有一种更好的方式来编写查询:
SELECT i.id, i.nombre, i.descripcion, i.time, ius.obtained
FROM insignias i LEFT OUTER JOIN
insignias_user iu
ON i.id = ius.id_insignia AND ius.username = 'Octal';
这是非常有效的,因为不需要实现中间表,并且数据库可以使用insgnias_user
上的适当索引。
另请注意:我将列引用更改为合格的列名称。 表别名可能不正确。
SELECT i.id, i.nombre, i.descripcion, i.time, IF(ius.id_insignia IS NULL, 0, 1)
FROM insignias i LEFT OUTER JOIN insignias_user ius
ON i.id = ius.id_insignia AND ius.username = 'Octal';
好的,它再次起作用,谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.