我正在使用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 |
+------+
这是所有产品与另一表中的产品匹配的零售商的名称。
我可能看不到这很简单。我尝试了内部联接,将所有联接与子查询一起使用,但是...
答案 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