如何查询多个表中的“多个”?

问题描述 投票:1回答:1

我有三个表与多对多的关系

CREATE TABLE plate(
   pid integer NOT NULL,
   pname text
);

CREATE TABLE vegetables(
   vid integer NOT NULL,
   vname text
); 

CREATE TABLE meat(
       mid integer NOT NULL,
       mname text
    );

这三个表的多对多关系:

+------+-----+
| pid  | vid |
+------+-----+
|   1  |  13 |
|   1  |  12 |
|   2  |  12 |
+------------+

和:

+-------+---+
| pid   |mid|
+-------+---+
|     1 | 2 | 
|     1 | 3 |
|     2 | 3 |
+-------+---+

我需要的**query**检查:

当用户输入盘子的成分时,

例:

vid"13","12" 

mid"2","3"

然后通过检查多对多关系表,查询将检查成分是否可以形成一个盘子。我尝试使用IN语句,但没有找到任何结果

任何帮助?

sql ms-access
1个回答
0
投票

我相信你需要找到含有所有肉类的盘子,然后才能找到含有所有蔬菜的盘子。一旦你有了这些只是处理一个JOIN来获得一个相交。

select pid
from
(
  -- plates having all the meats
  select pid
  from platemeat pm
  where pm.mid in (12,13)
  group by pid
  having count(distinct mid) = 2
) t1
join
(
  -- plates having all the vegetables
  select pid
  from plateveget pv
  where pv.vid in (2,3)
  group by pid
  having count(distinct vid) = 2
) t2 on t1.pid = t2.pid
© www.soinside.com 2019 - 2024. All rights reserved.