共有三个表-Item和。在它们之间,它们创建了多对多的关系。如何实现对特定.DetailDetailsItemItemDetail
例如,有一把锤子。它由几个部分组成,例如:铁、木、铜。我需要详细找到这把锤子。例如,我驱动诸如wood和Copper之类的参数,这肯定会找到所需的元素,但如果我添加一个额外的参数(例如硅胶),则该元素将被丢弃。
此外,这些参数可能包含包含铁、木和铜的其他元素,但如果其中一个参数不匹配,则该元素不应显示在最终选择中。
SELECT item.idItem, detail.idDetail, detail.title FROM item
JOIN details_item ON item.idItem = details_item.idItem
JOIN detail ON detail.idDetail = details_item .idDetail
WHERE detail.title in ("Железо","Дерево","Медь")
此查询查找具有这些部件的项目,但也显示只有 3 个材料匹配项中的 1 个的其他项目。
事先也不知道搜索的参数有多少,因为一个in (...)数组将被传递给
我提出这个解决方案:
它分别传输部件的名称 (
'Медь', 'Олово') 和单独的 - 它们的编号 (2)db-fiddle上的示例
可以直接在请求中计算传输部分的数量,但是在这种情况下,要么必须以二维数组的形式阻止名称的传输,要么计算在请求中
(('Медь'), ('Олово'))找到的 id 的数量零件表。第一个选项很麻烦。
第二种选择不好,因为如果我们传递了一个不存在的部分,那么它将被简单地丢弃,并且请求将返回所请求的现有部分的数据——这对我来说似乎是错误的。