2017-12-27 83 views
0

我被要求编写一个查询,该查询应只返回与其他多对多表中的每个条件匹配的项目。
这意味着从提供的列表中有一个子项目是不够的,而是必须为提供的列表中的每个项目都存在一个子项。
于是,我去了这样的事情:编写SQL查询以获取给定列表中的每个项目

select distinct ti.id 
    from table1 ti 
    where `sizeOfField2IdList` = 
      (
      select count(*) 
      from table2 t2 
      where t1.fieldX1 = t2.fieldY1 and t2.field2 IN (`field2IdList`) 
      ); 

有谁可以建议我需要一个更好的选择?
我希望这可以帮助任何人需要类似的东西。

+0

示例数据和期望的结果将真的有所帮助。 –

回答

0

对于提供的列表中的每个项目都必须存在。

是有一个替代的解决方案,通过基团通过该ID,并使用HAVING场2相等的计数sizeOfField2IdList

SELECT ti.id 
frp, table1 as ti 
inner join table2 as t2 on t1.fieldX1 = t2.fieldY1 
Where t2.field2 IN ($field2IdList) 
group by ti.id 
HAVING COUNT(DISTINCT t2.field2) = $sizeOfField2IdList 

(假设两个$field2IdList$sizeOfField2IdList将作为预定的设置变量到查询。)

相关问题