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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询多个表中的“多个”?相关的知识,希望对你有一定的参考价值。

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

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语句,但没有找到任何结果

任何帮助?

答案

我相信你需要找到含有所有肉类的盘子,然后才能找到含有所有蔬菜的盘子。一旦你有了这些只是处理一个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

以上是关于如何查询多个表中的“多个”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 连接语句选择与链接表中的多个值匹配的记录?

如何从sqlite中的多个表中选择特定列?

如何从PHP中的URL获取多个同名参数并将所有记录插入表中

Chrome-Devtools代码片段中的多个JS库

如何从 sqlite 表中选择文本中的多个最大值

sql如何在多个表中查询一个表的全部列