我正在尝试在SQLite中编写一个查询,该查询将多个值传递给WHERE子句,其中返回的结果同时包含匹配和不匹配的值。
我有一个名为songs
的表,其中包含以下列:
song_id
,song_title
,artist_name
我想传递一组歌曲标题,以查看它们是否存在于表中。如果存在,则返回的列表应同时包含song_title
和artist_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'
所以,从某种意义上说,我希望给定数组中的所有值都以艺术家名称返回表中存在的艺术家名称。这是一种相反的查询,但我无法弄清楚如何编写。
任何帮助都将是一个很大的帮助。
谢谢!
答案 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');
答案 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');