在带有联接 table 的 sqlite 中执行 select 时,别名列具有空值

When performing a select in sqlite with a joined table, an aliased column has a null value

我试图在 sqlite 中加入两个 tables,其中一列有一个别名,但是当我为该列添加别名时,它 returns 为空。

我有两个 table,像这样:

sqlite> SELECT * FROM series;
     _id = 1
    name = Castle
    type = show
     who = dan
disabled = 0

sqlite> SELECT * FROM series_meta;
  meta_id = 1
series_id = 1
meta_name = year
meta_type = int
meta_text =
 meta_int = 2009

现在,我尝试以下查询:SELECT _id, name, type, who, disabled, y.meta_int AS year FROM series LEFT JOIN series_meta AS y ON _id=y.series_id AND y.meta_name="year"; 我得到:

     _id = 1
    name = Castle
    type = show
     who = dan
disabled = 0
    year =

但是如果我去掉列别名 (SELECT _id, name, type, who, disabled, y.meta_int FROM series LEFT JOIN series_meta AS y ON _id=y.series_id AND y.meta_name="year";),我会得到预期的结果:

     _id = 1
    name = Castle
    type = show
     who = dan
disabled = 0
meta_int = 2009

我已经在 Windows 7 上用 sqlite 3.8.8.2 试过了。我也用 python 试过了,结果完全一样。删除 table 别名也不会改变任何内容。

有没有办法让它与列别名一起使用?

当然,您可以根据需要使用任意多的列别名,实际上您在这里面临着不同的问题,这是 year 作为字段名称的用法。

如果 y.meta_int 被命名为 year,结果将是 (null),而任何其他名称都可以:

SELECT _id, name, type, who, disabled, y.meta_int tyear
FROM series
LEFT JOIN series_meta AS y ON _id=y.series_id AND y.meta_name="year";

相同的结果没有加入但在这里。但不同的是,如果您使用 'year' 作为字段名称,您实际上根本不会得到任何结果。任何其他名称都可以:

SELECT _id, name, type, who, disabled, y.meta_int AS m_year
FROM series, series_meta AS y
WHERE _id=y.series_id AND y.meta_name="year";

希望对您有所帮助!

在SQL中,单引号用于字符串,双引号用于引用列名。 因此 y.meta_name="year"y.meta_name 列的内容与 y.meta_int 列的内容进行比较。

为了与 MySQL 等有问题的数据库兼容,SQLite 还支持对带引号的列名使用单引号,对字符串使用双引号,但前提是区别明确。 您应该始终使用正确的 SQL 语法:

SELECT _id, name, type, who, disabled, y.meta_int AS year
FROM series
LEFT JOIN series_meta AS y ON _id=y.series_id
                          AND y.meta_name = 'year'