INNER JOIN不会返回任何结果 - SQLite

时间:2018-01-18 03:50:08

标签: sql database sqlite inner-join where-clause

我正在尝试咨询我的数据库并从表中返回带有另外三个表的Foregin Key的值,但是当我在同一个Query中使用INNER JOIN,WHERE和AND时,我什么都没有。

我的主要表格:

CREATE TABLE Matematica (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 
    Pergunta TEXT NOT NULL, 
    Alternativas TEXT, 
    Gabarito TEXT NOT NULL, 
    Assunto INTEGER NOT NULL REFERENCES Assunto (ID), 
    Vestibular INTEGER NOT NULL REFERENCES Universidades (ID), 
    Ano NUMERIC NOT NULL, 
    Tipo INTEGER NOT NULL, 
    Imagem TEXT, Previa TEXT NOT NULL, 
    OBS TEXT, 
    Fonte TEXT, 
    qImagem TEXT);
+----+--------------------+--------------+----------+---------+------------+------+------+--------+----------+-----+-------+---------+
| ID |      Pergunta      | Alternativas | Gabarito | Assunto | Vestibular | Ano  | Tipo | Imagem |  Previa  | OBS | Fonte | qImagem |
+----+--------------------+--------------+----------+---------+------------+------+------+--------+----------+-----+-------+---------+
|  1 | SOME BIG QUESTION  | a)A          | a        |       2 |          1 | 2014 |    0 |      3 | SOME BIG |     |       |         |
|    |                    | b)B          |          |         |            |      |      |        | TEXT     |     |       |         |
|    |                    | c)C          |          |         |            |      |      |        |          |     |       |         |
|    |                    | d)D          |          |         |            |      |      |        |          |     |       |         |
+----+--------------------+--------------+----------+---------+------------+------+------+--------+----------+-----+-------+---------+

Assunto表:

CREATE TABLE Assunto (ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
    Assunto TEXT NOT NULL, 
    Disciplina TEXT NOT NULL);
+----+--------------------------+------------+
| ID |         Assunto          | Disciplina |
+----+--------------------------+------------+
|  1 | DNA e RNA                | Biologia   |
|  2 | Geometria plana          | Matemática |
|  3 | Evolução                 | Biologia   |
|  4 | Associação de resistores | Física     |
|  5 | Realismo e Naturalismo   | Literatura |
+----+--------------------------+------------+

Universidades表:

CREATE TABLE Universidades (ID INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL, 
    Vestibular TEXT (50) NOT NULL);
+-----+------------+
| ID  | Vestibular |
+-----+------------+
|   1 | FUVEST     |
|   2 | UNICAMP    |
|   3 | VUNESP     |
+-----+------------+

我的SQL查询:

SELECT Pergunta,
       Alternativas,
       Gabarito,
       Assunto.Assunto          AS Assunto,
       Universidades.Vestibular AS Vestibular,
       Ano,
       Tipo,
       Imagem,
       Previa,
       OBS,
       Fonte,
       qImagem,
       Matematica.ID
FROM   Matematica
       INNER JOIN Assunto
               ON Assunto.ID = Matematica.Assunto
       INNER JOIN Universidades
               ON Universidades.ID = Matematica.Vestibular
WHERE  Ano = 2014
       AND Matematica.Vestibular = 'FUVEST' 

如果我从'FUVEST'更改为1,查询将返回表中存在的行。

感谢。

1 个答案:

答案 0 :(得分:1)

在下文中,Matematica.Vestibular列将是数字,因为它是引用ID INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL表中ID列(定义为Universidades)的列。因此,为什么1工作,2和3也有效(如果Matematica表中有行参考UNICAMP和VUNESP,即UNICAMP的ID为2 VUNESP为3),任何其他数字都不会。

SELECT Pergunta,
       Alternativas,
       Gabarito,
       Assunto.Assunto          AS Assunto,
       Universidades.Vestibular AS Vestibular,
       Ano,
       Tipo,
       Imagem,
       Previa,
       OBS,
       Fonte,
       qImagem,
       Matematica.ID
FROM   Matematica
       INNER JOIN Assunto
               ON Assunto.ID = Matematica.Assunto
       INNER JOIN Universidades
               ON Universidades.ID = Matematica.Vestibular
WHERE  Ano = 2014
       AND Matematica.Vestibular = 'FUVEST' 

我相信你要检查的是,Universiddes是否为FUVEST,因此上述内容应更改为(最后一行更改): -

SELECT Pergunta,
       Alternativas,
       Gabarito,
       Assunto.Assunto          AS Assunto,
       Universidades.Vestibular AS Vestibular,
       Ano,
       Tipo,
       Imagem,
       Previa,
       OBS,
       Fonte,
       qImagem,
       Matematica.ID
FROM   Matematica
       INNER JOIN Assunto
               ON Assunto.ID = Matematica.Assunto
       INNER JOIN Universidades
               ON Universidades.ID = Matematica.Vestibular
WHERE  Ano = 2014
       AND Universidades.Vestibular = 'FUVEST'