Как написать запрос SQLite SELECT с предложением WHERE, чтобы получить как совпадающие, так и несопоставленные значения - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь написать запрос в SQLite, передавая несколько значений в предложение WHERE, в котором возвращаемые результаты содержат как совпадающие, так и не совпадающие значения.

У меня есть таблица с именем songs со следующими столбцами:song_id, song_title, artist_name

Я хочу передать массив названий песен, чтобы увидеть, существуют ли они в таблице или нет.Если они существуют, возвращаемый список должен содержать как song_title, так и artist_name, но если некоторые заголовки не существуют, возвращается только данный заголовок.

Например, если в таблице существуют следующие значения:

1, 'song1', 'artist1'

2, 'song2', 'artist1'

3, 'song3', 'artist2'

4, 'song4', 'artist1'

, и я пишу следующую инструкцию запроса:

SELECT song_title, artist_name FROM songs WHERE song_title IN ('song1', 'song2', 'song5');

То, что он возвращает, выглядит следующим образом:

'song1', 'artist1'

'song2', 'artist1'

То, что я хочу, это какследует:

'song1', 'artist1'

'song2', 'artist1'

'song5'

Итак, в некотором смысле, яхотите, чтобы все значения в данном массиве были возвращены вместе с именем исполнителя по сравнению с теми, которые существуют в таблице.Это обратный тип запроса, но я не могу понять, как его написать.

Любая помощь будет очень полезна.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы можете сделать левое соединение на себя.Как то так:

SELECT a.song_title, a.artist_name 
  FROM songs a left join 
    songs b on a.song_id = b.song_id
  WHERE a.song_title IN ('song1', 'song2', 'song5');
0 голосов
/ 15 февраля 2019

Самое простое, что можно сделать здесь, это сохранить таблицу всех песен.В качестве примера, я приведу эту информацию ниже в подзапросе:

SELECT t.song_title, s.artist_name
FROM
(
    SELECT 'song1' AS song_title UNION ALL
    SELECT 'song2' UNION ALL
    SELECT 'song3' UNION ALL
    SELECT 'song4' UNION ALL
    SELECT 'song5'
) t
LEFT JOIN songs s
    ON t.song_title = s.song_title
WHERE
    t.song_title IN ('song1', 'song2', 'song5');

enter image description here

Демо

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