【问题标题】:mysql : intersection between 3 or more SELECT's resultsmysql : 3 个或更多 SELECT 的结果之间的交集
【发布时间】:2013-04-05 15:18:30
【问题描述】:

好的,假设我们有 3 个或更多具有相同结构的“k”个表:
表 1:

id customer_id
1  35
2  36
3  37

表 2:

id customer_id
1  35
2  38
3  39

...
表k:

id customer_id
1  35
2  69
3  52

如何选择所有表中存在的所有 customer_id(换句话说:交集),在此示例中,如果有 3 个表,结果应该是这样的

id customer_id
1  35

如果有人能帮忙,我将不胜感激

【问题讨论】:

  • 这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ.
  • 对不起哥们,我急着想得到答案,下次:)

标签: mysql join intersect


【解决方案1】:
SELECT t1.customer_id
FROM `table 1` AS t1
INNER JOIN `table 2` AS t2 ON t1.customer_id = t2.customer_id
-- ...
INNER JOIN `table k` AS tk ON t1.customer_id = tk.customer_id

【讨论】:

    【解决方案2】:

    这应该可行:

    SELECT table1.id, table1.customer_id
    FROM table1, table2, ..., tableK
    WHERE table1.id=table2.id
    AND table1.id=table3.id
    ...
    AND table1.id=tableK.id
    

    为简单起见,您还可以为每个表定义别名:

    FROM table1 a, table2 b, ..., tableK k
    WHERE a.id=b.id
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT 
          customer_id
      FROM (
          SELECT
              customer_id
              1 as counter 
          FROM 
              table1
      
          UNION ALL 
      
          SELECT
              customer_id
              1 as counter 
          FROM 
              table2
      
          ....
      
          SELECT
              customer_id
              1 as counter 
          FROM 
              tablek
      
      ) as tmp
      GROUP BY
          customer_id
      HAVING
          SUM(counter) = k
      

      【讨论】:

        【解决方案4】:
        create table dela (
            id int
        );
        create table delb (
            id int
        );
        create table delc (
            id int
        );
        
        drop table dela;
        
        insert into dela values (1),(2),(3);
        insert into delb values (5),(4),(3);
        insert into delc values (5),(1),(3);
        
        select 
            a.id
        from
            dela a
                join
            delb b ON a.id = b.id
                join
            delc c ON a.id = c.id;
        

        【讨论】:

          猜你喜欢
          • 2017-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-08
          相关资源
          最近更新 更多