SQL筛选器条目与另一个表中的所有条目匹配

时间:2018-10-11 23:03:26

标签: mysql sql

我正在使用MySQL。假设我有以下两个表:

table 1
+---------+
| product |
+---------+
|       1 |
|       2 |
+---------+

table2
+------+---------+
| name | product |
+------+---------+
| A    |       1 |
| A    |       2 |
| B    |       1 |
| B    |       3 |
| C    |       1 |
+------+---------+

使用以下代码生成:

CREATE TABLE table1(
    product INT
);

CREATE TABLE table2(
    name VARCHAR(10),
    product INT
);

INSERT INTO table1 VALUES(1);
INSERT INTO table1 VALUES(2);

INSERT INTO table2 VALUES('A', 1);
INSERT INTO table2 VALUES('A', 2);
INSERT INTO table2 VALUES('B', 1);
INSERT INTO table2 VALUES('B', 3);
INSERT INTO table2 VALUES('C', 1);

我想产生一个表,其名称来自table2,其产品与table1的所有产品匹配。在这种情况下,

+------+
| name |
+------+
| A    |
+------+

这是所有产品与另一表中的产品匹配的零售商的名称。

我可能看不到这很简单。我尝试了内部联接,将所有联接与子查询一起使用,但是...

3 个答案:

答案 0 :(得分:0)

您可以使用join来获取任何匹配项。然后having检查它们是否全部存在。

假设没有重复:

select t2.name
from table2 t2 join
     table1 t1
     using (product)
group by t2.name
having count(*) = (select count(*) from table1);

答案 1 :(得分:0)

创建table3然后执行以下

INSERT INTO table3 (name)
SELECT DISTINCT t2.name
FROM table2 t2 
LEFT JOIN table1 t1 on t2.product = t1.product
WHERE t1.product IS NOT NULL

答案 2 :(得分:0)

我最终可以使用以下方法解决此问题:

SELECT nome
FROM table2
WHERE product IN (SELECT product FROM table1)
GROUP BY nome HAVING COUNT(*) = (SELECT COUNT(*) FROM table1);

基于check if a column contains ALL the values of another column - Mysql