SQL 复杂搜索的语法
SQL syntax for complex search
我正在尝试弄清楚如何格式化将执行复杂搜索的 SQL SELECT 命令
我有一个包含两个表的数据库。
文件
文件ID
文件路径
参数
参数名称
参数值
文件ID
目标是搜索多个值的参数,然后只搜索 return 个具有所有值的文件 ID。
这些是媒体文件,所以参数是格式、视频宽度、音频编解码器等...我希望用户能够 select 任意数量的这些字段,然后拥有 return 个匹配所有参数的文件。
例如,我想 select 所有具有 MKV 格式、AVC 视频编解码器和 AAC 音频编解码器的文件。
我不知道该怎么做。如果我进行左连接,我可以让它使用一个参数,但一旦添加第二个参数,它就会失败。我假设我需要使用嵌套连接,但我对 SQL 的了解还不够好,无法弄清楚如何做到这一点。
如果重要的话,这是使用 SQLite3 的本地 C++ 应用程序。
一种方法是使用 group by
和 having
:
select fileid
from parameters p
where (name = 'name1' and value = 'value1') or
(name = 'name2' and value = 'value2') or
(name = 'name3' and value = 'value3')
group by fileid
having count(distinct name) = 3;
“3”是您要查找的不同参数的数量。
您可以使用IN
SELECT *
FROM file
WHERE fileid IN (SELECT fileid FROM parameters WHERE name = 'name1' and value = 'value1') AND
fileid IN (SELECT fileid FROM parameters WHERE name = 'name2' and value = 'value2') AND
fileid IN (SELECT fileid FROM parameters WHERE name = 'name3' and value = 'value3')
我正在尝试弄清楚如何格式化将执行复杂搜索的 SQL SELECT 命令
我有一个包含两个表的数据库。
文件
文件ID
文件路径
参数
参数名称
参数值
文件ID
目标是搜索多个值的参数,然后只搜索 return 个具有所有值的文件 ID。
这些是媒体文件,所以参数是格式、视频宽度、音频编解码器等...我希望用户能够 select 任意数量的这些字段,然后拥有 return 个匹配所有参数的文件。
例如,我想 select 所有具有 MKV 格式、AVC 视频编解码器和 AAC 音频编解码器的文件。
我不知道该怎么做。如果我进行左连接,我可以让它使用一个参数,但一旦添加第二个参数,它就会失败。我假设我需要使用嵌套连接,但我对 SQL 的了解还不够好,无法弄清楚如何做到这一点。
如果重要的话,这是使用 SQLite3 的本地 C++ 应用程序。
一种方法是使用 group by
和 having
:
select fileid
from parameters p
where (name = 'name1' and value = 'value1') or
(name = 'name2' and value = 'value2') or
(name = 'name3' and value = 'value3')
group by fileid
having count(distinct name) = 3;
“3”是您要查找的不同参数的数量。
您可以使用IN
SELECT *
FROM file
WHERE fileid IN (SELECT fileid FROM parameters WHERE name = 'name1' and value = 'value1') AND
fileid IN (SELECT fileid FROM parameters WHERE name = 'name2' and value = 'value2') AND
fileid IN (SELECT fileid FROM parameters WHERE name = 'name3' and value = 'value3')