【问题标题】:SQL Combine Two Tables Next Two Each with Repeating Distinct Values in OneSQL 将两个表合并为下两个表,其中每个表具有重复的不同值
【发布时间】:2026-01-18 17:10:01
【问题描述】:

我正在尝试合并两个表格,以便在每个不同的用户旁边列出所有可用的产品。因此,对于每个不同的用户,产品都会重复。如果有 2 个用户和 3 个产品,则该表将有 6 行长。

表_A

select user from users group by user;

user 
u_1
u_2

表_B

select product from products group by product;

user 
p_1
p_2
p_3

期望的输出

user  product
u_1   p_1
u_1   p_2
u_1   p_3
u_2   p_1
u_2   p_2
u_2   p_3

到目前为止,这是我的代码:

select a.user, b.product from (select user from users group by user) a
(select product from products group by product) b;

【问题讨论】:

    标签: sql


    【解决方案1】:

    使用cross join

    ( 符合 ANSI-92 标准,建议而不是使用 ANSI-89 标准,其中包含逗号来分隔表名SQL 语句):

    select a.user, b.product 
      from users a
     cross join products b 
     group by a.user, b.product;
    

    DB-Fiddle Demo

    【讨论】:

      【解决方案2】:

      只需像这样使用笛卡尔连接:

      SELECT users.user, products.product FROM users, products ORDER BY users.user ASC;
      

      它将产生每个用户和组组合的结果。

      【讨论】:

        【解决方案3】:

        您在查询中忘记了逗号。

        SQL Fiddle

        MySQL 5.6 架构设置

        CREATE TABLE `users`
        (
          user VARCHAR(255)
        );
        
        CREATE TABLE `products`
        (
          product VARCHAR(255)
        );
        
        INSERT INTO `users` VALUES ('u_1'), ('u_2');
        
        INSERT INTO `products` VALUES ('p_1'), ('p_2'), ('p_3');
        

        查询 1

        SELECT * FROM `users`, `products` ORDER BY `user` ASC
        

        Results

        | user | product |
        |------|---------|
        |  u_1 |     p_1 |
        |  u_1 |     p_2 |
        |  u_1 |     p_3 |
        |  u_2 |     p_1 |
        |  u_2 |     p_2 |
        |  u_2 |     p_3 |
        

        【讨论】: