代码之家  ›  专栏  ›  技术社区  ›  Ricardo Cruz

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

  •  1
  • Ricardo Cruz  · 技术社区  · 7 年前

    我正在使用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);
    

    我想用表2中的名称生成一个表,其产品与表1中的所有产品匹配。在这种情况下

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

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

    这可能是我没有看到的一些简单的东西。我尝试过内部连接,使用all和子查询。。。但是。。。

    3 回复  |  直到 7 年前
        1
  •  0
  •   Prince Trotman    7 年前

    创建表3,然后执行以下操作

    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
  •  1
  •   Ricardo Cruz    7 年前

    我最终通过以下方法解决了这个问题:

    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

        3
  •  0
  •   Gordon Linoff    7 年前

    join 得到 任何 比赛。然后 having

    假设没有重复:

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