SQlite LEFT JOIN возвращает значения NULL, когда это не должно - PullRequest
0 голосов
/ 23 марта 2020

У меня есть несколько таблиц. При использовании LEFT JOIN между таблицами part и brand я получаю ожидаемый результат, когда использую тот же запрос, но между part и partgroup, все поля данных группы деталей возвращают NULL .

Таблицы:

CREATE TABLE part (
    part_ID              PRIMARY KEY,
    reference    TEXT    NOT NULL,
    brand_ID             REFERENCES brand (brand_ID) 
                         NOT NULL,
    partgroup_ID         NOT NULL
                         REFERENCES partgroup (partgroup_ID)
);

CREATE TABLE partgroup (
    partgroup_ID      PRIMARY KEY,
    name         TEXT NOT NULL
);

CREATE TABLE brand (
    brand_ID          PRIMARY KEY,
    name         TEXT NOT NULL
);

Запрос, который работает part LEFT JOIN brand :

SELECT 
    part.part_ID,
    part.brand_ID,
    brand.brand_ID,
    brand.name
FROM 
    part
LEFT JOIN brand ON part.brand_ID = brand.brand_ID;

Запрос, который не работает part LEFT JOIN partgroup :

SELECT 
    part.part_ID,
    part.partgroup_ID,
    partgroup.partgroup_ID,
    partgroup.name
FROM 
    part
LEFT JOIN partgroup ON part.partgroup_ID = partgroup.partgroup_ID;

data

Result of the queries

1 Ответ

0 голосов
/ 23 марта 2020

Это говорит о том, что ключи не совпадают - правильно объявленный внешний ключ мог бы это исправить. Как и в случае с цифрой c.

Несмотря на то, что значения выглядят одинаково, это не так. Вот некоторые возможности:

  • Ведущие пробелы
  • Конечные пробелы
  • Схожие символы (например, заглавная буква O, а не цифра c 0)
  • Скрытые символы

Требуется некоторое расследование, чтобы выяснить, что происходит. Вы можете начать с просмотра длины полей partId, чтобы увидеть, совпадают ли они.

Или же вы можете просто реализовать идентификатор цифры 1021 и использовать его для ссылок на внешние ключи. Обычно целочисленные ключи в любом случае более эффективны - потому что они имеют фиксированный размер и меньше, чем строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...