mariadb - LEFT OUTER JOIN

时间:2015-07-01 00:21:08

标签: mysql sql left-join mariadb

最近迁移了一台服务器,我发现了这个"错误",我有mysql作为数据库,我想要的(我不是SQL的专家),是加入2个相关的表由1:N组成,例如,

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)表示用户是否'八进制'有没有那个徽章。

所以...,现在,我有作为DB的mariadb,它返回一个不同的输出,其中所有的行都被标记为'获得' = 1。

我来到这里是因为据我所知,我已经抛弃了所有愚蠢的错误。

2 个答案:

答案 0 :(得分:2)

我不能说为什么查询不起作用。这似乎是一个数据问题 - 所有行匹配。

但是,有一种更好的方法来编写查询:

    string form = comboBox1.Text;
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + form + "$]", conn);
    DataTable dt = new DataTable();
    myDataAdapter.Fill(dt);

这样效率更高,因为中间表不需要实现,数据库可以在'use strict'; var React = require('react'); var mountCount = 0; var MyComponent = React.createClass({ getInitialState: function () { return { instanceNumber: mountCount }; }, componentDidMount: function () { mountCount++; }, render: function () { return <div>I am instance no. {{this.state.instanceNumber}}.</div>; } }); module.exports = MyComponent; 上使用适当的索引。

另请注意:我将列引用更改为限定列名。表别名可能不正确。

答案 1 :(得分:0)

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';

好的,它再次起作用,谢谢。