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

如何使用WHERE子句编写SQLite SELECT查询以获取匹配值和非匹配值,sqlite,Sqlite,我试图在SQLite中编写一个查询,将多个值传递给WHERE子句,其中返回的结果同时包含匹配值和不匹配值 我有一个名为songs的表,其中包含以下列: 歌曲id、歌曲标题、艺术家姓名 我想传递一组歌曲标题,看看它们是否存在于表中。如果存在,则返回的列表应同时包含歌曲标题和艺术家名称,但如果某些标题不存在,则只返回给定的标题 例如,如果表中存在以下值: 1、‘歌曲1’、‘艺人1’ 2、‘歌曲2’、‘艺人1’ 3、‘歌曲3’、‘艺人2’ 4、‘歌曲4’、‘艺人1’ 我编写以下查询语句: 从歌曲中选择

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

我有一个名为songs的表,其中包含以下列: 歌曲id、歌曲标题、艺术家姓名

我想传递一组歌曲标题,看看它们是否存在于表中。如果存在,则返回的列表应同时包含歌曲标题和艺术家名称,但如果某些标题不存在,则只返回给定的标题

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

1、‘歌曲1’、‘艺人1’

2、‘歌曲2’、‘艺人1’

3、‘歌曲3’、‘艺人2’

4、‘歌曲4’、‘艺人1’

我编写以下查询语句:

从歌曲中选择歌曲标题、艺术家名称,其中歌曲标题位于“song1”、“song2”、“song5”

返回的内容如下:

“歌曲1”,“艺人1”

“歌曲2”,“艺人1”

我想要的是:

“歌曲1”,“艺人1”

“歌曲2”,“艺人1”

“宋5”

因此,在某种意义上,我希望给定数组中的所有值都返回艺术家名称,并与表中存在的值进行比较。这是一种反向查询,但我不知道如何编写它

任何帮助都是很大的帮助


提前谢谢

这里最简单的方法是维护一个包含所有歌曲的表格。例如,我将以下信息内联到子查询中:

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

你可以自己做一个左连接。大概是这样的:

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

谢谢你的回答。否,在我的情况下传递的值将是未知的。如果我的例子给人的印象是相反的,那么很抱歉。@ShahoodulHassan我已经回答了你的问题。如果传递的值很大,比如说100或更多,那么写这样的查询不是不可能吗?一点也不可能,假设您没有超过WHERE in子句中可能出现的项数。请参阅这是一个具有未知数量的将要传递的值的查询。有时,值是2,有时是100等等。如何使语句动态以满足传递的值的数量。抱歉,它不起作用。它仍然没有返回“song5”。