如何使用WHERE子句编写SQLite SELECT查询以获取匹配和不匹配的值

时间:2019-02-15 06:06:23

标签: sqlite

我正在尝试在SQLite中编写一个查询,该查询将多个值传递给WHERE子句,其中返回的结果同时包含匹配和不匹配的值。

我有一个名为songs的表,其中包含以下列: song_idsong_titleartist_name

我想传递一组歌曲标题,以查看它们是否存在于表中。如果存在,则返回的列表应同时包含song_titleartist_name,但是如果某些标题不存在,则仅返回给定的标题。

例如,如果表中存在以下值:

1,“歌曲1”,“艺术家1”

2,“歌曲2”,“艺术家1”

3,“歌曲3”,“艺术家2”

4,“歌曲4”,“艺术家1”

然后我写以下查询语句:

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

返回的内容如下:

“歌曲1”,“艺术家1”

“歌曲2”,“艺术家1”

我想要的如下:

“歌曲1”,“艺术家1”

“歌曲2”,“艺术家1”

'song5'

所以,从某种意义上说,我希望给定数组中的所有值都以艺术家名称返回表中存在的艺术家名称。这是一种相反的查询,但我无法弄清楚如何编写。

任何帮助都将是一个很大的帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的方法是维护所有歌曲的表。例如,我在下面的子查询中内联此信息:

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

Demo

答案 1 :(得分:0)

您可以对自己进行左连接。像这样:

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