sql - 复杂的 SQL 查询::显示乘法表中的内联数据

标签 sql mysql select

您好,我在寻找解决方案时遇到了问题。

我有 3 个表:

  1. 客户
    • 客户编号
    • 客户姓名
  2. 关系
    • 订阅号
    • 客户编号
  3. 订阅

一个客户可以与多个订阅有关系,我想像这样显示数据:

customer_id, customer_name, subscription_first, subscription_second, subscription_n 

...全部在一行中。

谁能帮帮我:?

好的,首先,感谢您的帮助:)

我做了这样的事情并且它的工作:)

SELECT `main_table`.*, `customer_lastname_table`.`value` AS `customer_lastname`, `customer_firstname_table`.`value` AS `customer_firstname`, IF(main_table.customer_id = 0, 1, 2) AS `type`, `store`.`group_id`, `store`.`website_id`, `subscription_table_one`.`subscription_code`, `subscription_table_two`.`subscription_code` FROM `newsletter_subscriber` AS `main_table`

 LEFT JOIN `customer_entity_varchar` AS `customer_lastname_table` ON customer_lastname_table.entity_id=main_table.customer_id
 AND customer_lastname_table.attribute_id = 7

 LEFT JOIN `customer_entity_varchar` AS `customer_firstname_table` ON customer_firstname_table.entity_id=main_table.customer_id
 AND customer_firstname_table.attribute_id = 5

 INNER JOIN `core_store` AS `store` ON store.store_id = main_table.store_id
 LEFT JOIN `b_newsletter_relations` AS `relation_table` ON relation_table.customer_id=main_table.customer_id
 LEFT JOIN `b_newsletter_subscriptions` AS `subscription_table_one` ON subscription_table_one.subscription_id=relation_table.subscription_id
 LEFT JOIN `b_newsletter_subscriptions` AS `subscription_table_two` ON subscription_table_one.subscription_id=relation_table.subscription_id
 GROUP BY `customer_id`

Aaa,还有一件事,它是通过 PHP 动态生成的。

最佳答案

您可以使用 MySQL 提供的方便的 GROUP_CONCAT 函数。下面是解决方案。

create table customer (customer_id int, customer_name varchar(100));

create table subscriptions (subscription_id int, subscription_name varchar(100));

create table customer_relation (subscription_id int, customer_id int);

insert into customer values (1,'cust1');
insert into customer values (2,'cust2');

insert into subscriptions values (1,'sub1');
insert into subscriptions values (2,'sub2');
insert into subscriptions values (3,'sub3');

insert into customer_relation values (1,1);
insert into customer_relation values (2,1);
insert into customer_relation values (3,1);

insert into customer_relation values (1,2);
insert into customer_relation values (3,2);


SELECT c.customer_id
     , c.customer_name
     , GROUP_CONCAT(s.subscription_name ORDER BY s.subscription_name) subs
  FROM customer c
     , subscriptions s
     , customer_relation x
 WHERE x.subscription_id = s.subscription_id
   AND x.customer_id = c.customer_id
GROUP BY
       c.customer_id
     , c.customer_name;

结果:

customer_id    customer_name    subs
1              cust1            sub1,sub2,sub3
2              cust2            sub1,sub3

关于sql - 复杂的 SQL 查询::显示乘法表中的内联数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321404/

相关文章:

SQL - 从另一个表的字段填充一个表

sql - 内连接只返回7条记录

mysql - 试图获得月份数

mysql - 无需外键即可加入

php - MySql 查询正在对表中的每条记录执行

c# - 当应用程序有很多调用时如何管理连接池限制?

javascript - 获取选择标签的当前值

mysql order by 不能与 group by 一起使用

sql - 如何在SQL数据库中将带有列表的对象保存为属性

php - 将 HTML 数据保存到 MySQL 数据库时,正确使用的函数是什么?