我正在尝试弄清楚如何格式化将执行复杂搜索的SQL SELECT命令

我有两个表的数据库。

档案
文件ID
文件路径

参量
参数名称
参数值
文件ID

目标是在“参数”中搜索多个值,然后仅返回具有所有值的FileID。

这些是媒体文件,因此参数是诸如格式,视频宽度,音频编解码器之类的东西。我希望用户能够根据需要选择任意多个这些字段,然后让其返回与所有参数。

因此,例如,我想选择所有具有MKV格式,AVC的VideoCodec和AAC的AudioCodec的文件。

我不知道该怎么做。如果我进行左联接,则可以使它使用一个参数,但是一旦添加第二个参数,它将失败。我以为我需要使用嵌套联接,但是我对SQL不够了解,无法确切地知道如何做到这一点。

这很重要,这是使用SQLite3的本地C ++应用程序。

最佳答案

您可以使用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 - 用于复杂搜索的SQL语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45912244/

10-09 08:47