最近迁移了服务器,我发现了这个“错误”,我有mysql作为数据库,我想要的(我不是SQL专家),是将2个相关表按1:N连接举个例子,
Table 1: Badges_Person
Table 2: Badges
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)的徽章列表,该列表示用户“Octal”是否拥有该徽章。
所以...,现在,我将 mariadb 作为数据库,它返回不同的输出,其中所有行都被标记为 'obtained' = 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
上的适当索引。
另请注意:我将列引用更改为限定的列名称。表别名可能不正确。
关于mysql - mariadb - 左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150652/