如何使用WHERE子句编写SQLite SELECT查询以获取匹配值和非匹配值
我试图在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” 因此,在某种意义上,我希望给定数组中的所有值都返回艺术家名称,并与表中存在的值进行比较。这是一种反向查询,但我不知道如何编写它 任何帮助都是很大的帮助如何使用WHERE子句编写SQLite SELECT查询以获取匹配值和非匹配值,sqlite,Sqlite,我试图在SQLite中编写一个查询,将多个值传递给WHERE子句,其中返回的结果同时包含匹配值和不匹配值 我有一个名为songs的表,其中包含以下列: 歌曲id、歌曲标题、艺术家姓名 我想传递一组歌曲标题,看看它们是否存在于表中。如果存在,则返回的列表应同时包含歌曲标题和艺术家名称,但如果某些标题不存在,则只返回给定的标题 例如,如果表中存在以下值: 1、‘歌曲1’、‘艺人1’ 2、‘歌曲2’、‘艺人1’ 3、‘歌曲3’、‘艺人2’ 4、‘歌曲4’、‘艺人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');
你可以自己做一个左连接。大概是这样的:
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”。