我正在进入这个项目并且有一些MySQL背景来做基本的SELECT和INSERT等等。但是,这让我在墙上撞到了我的头。
我在MySQL中有一个典型的用户信息表:
USERS
+-------+----------+---------+-----+
|user_id|first_name|last_name|email|
+-------+----------+---------+-----+
1 tim jones tj@acme.com
2 sarah peteres sp@acme.com
3 larry doe ld@acme.com
然后我有多个产品表:
PRODUCTS_ONE
+-------+-------+---------+----------+--------------+
|prod_id|user_id|prod_name|prod_width|prod_ship_date|
+-------+-------+---------+----------+--------------+
1 1 bowl nine 1-1-16
2 1 fork one 1-2-16
3 2 plate eleven 1-3-16
PRODUCTS_TWO
+-------+-------+----------+--------+--------------+
|prod_id|user_id|prod_state|prod_job|prod_ship_date|
+-------+-------+----------+--------+--------------+
1 3 maine min 1-1-16
2 2 texas max 1-2-16
3 1 ohio min 1-1-16
我总共有15个PRODUCT表,都有prod_id,users_id和prod_ship_date。其他字段可能根据它们所在的产品表而有所不同。但是,所有不同的PRODUCT表都有这三个常见字段。
我要完成的是获取与某个发货日期匹配的产品的用户信息和产品信息列表。
我想找到所有用户以及他们在特定日期获得的产品表和产品ID。
所以,如果我在1-1-16的发货日期搜索,我会得到类似的东西:
+----------------+-----------+-------------+-----------+
|users.first_name|users.email|product_table|products_id|
+----------------+-----------+-------------+-----------+
tim tj@acme.com one,two 1,3
larry ld@acme.com one 3
如果我在1-2-16的发货日期搜索,我会得到类似的东西:
+----------------+-----------+-------------+-----------+
|users.first_name|users.email|product_table|products_id|
+----------------+-----------+-------------+-----------+
tim tj@acme.com one 2
sarah sp@acme.com two 2
我希望这一切都有道理。遗憾的是,由于遗留问题,我无法更改各种产品表的结构或布局。
我无法弄清楚用于获取类似内容的MySQL语句。
以上结果将用于报告目的。
答案 0 :(得分:1)
你可以这样写一个查询:
select first_name,email,prod_id,group_concat(product_table) as product_table from (
select u.user_id ,first_name,email,prod_id, 'one' as product_table from users u join products_one p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
union
select u.user_id,first_name,email,prod_id, 'two' as product_table from users u join products_two p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
) a
按a.user_id分组
按user_id,product_table命令
等等。
使用第二组concat并按
排序select first_name,email,group_concat(prod_id),group_concat(product_table) as product_table from (
select u.user_id ,first_name,email,prod_id, 'one' as product_table from users u join products_one p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
union
select u.user_id,first_name,email,prod_id, 'two' as product_table from users u join products_two p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
) a
group by a.user_id
order by user_id,product_table
查看此sqlfiddle