一个表left join多个表并导出csv本身是很简单的事。但是主表的一列有多个值,一开始用逗号分隔保存数据,这样做的好处是方便应用程序处理,但是对于mysql来说这是anti-pattern的做法。果然,在写left join的时候无法实现一个field保存多ID,并跟关联表匹配输出csv文件。(尝试了find_in_set 只能输入一行)

还是应该遵守RMDB的范式来设计DB,将多值的列,拆分出一个新表来保存。这样写left join时就方便一对一处理。最后,要输出多个值时,多值会存在多列,可以采用GROUP_CONCAT() ... group by将多列值合并为一行。

最终的sql如下

CREATE VIEW edc_v_customer AS SELECT A.`id`,

A.`email`,

A.`mobile`, A.`first_name`,A.`last_name`,

A.`manggis_id`,

A.`external_id`,

GROUP_CONCAT(ST.item_value) as site,

A.`nick_name`,

A.`chinese_name`,

S.`item_value` as sex,

A.`birthdate`,

A.`age`,

G.`item_value` as `age_group`,

I.`item_value` as income,

E.`item_value` as educate,

M.`item_value` as marial,

O.`item_value` as occupation,

C.`item_value` as country,

A.`update_time`,A.`status` FROM edc_customer AS A

LEFT JOIN edc_prop_country AS C ON A.`country_id`>0 and A.`country_id`=C.id

LEFT JOIN edc_customer_in_site AS CS ON (CS.customer_id=A.id)

LEFT JOIN edc_prop_site AS ST ON ST.id=CS.site_id

LEFT join `edc_prop_sex` AS S on A.`sex_id`>0 and S.id=A.`sex_id`

LEFT join `edc_prop_occupation` AS O on A.`occupation_id`>0 and O.id=A.`occupation_id`

LEFT join `edc_prop_marial` AS M on A.`marial_id`>0 and M.id=A.`marial_id`

LEFT join `edc_prop_income` AS I on A.`income_id`>0 and I.id=A.`income_id`

LEFT join `edc_prop_educate` AS E on A.`educate_id`>0 and E.id=A.`educate_id`

LEFT join `edc_prop_age_group` AS G on A.`age_group_id`>0 and G.id=A.`age_group_id`

GROUP BY A.id

; 另外,要记得加上index,如果没有index,表数据大的话会非常慢,甚至拒绝响应。 默认导出csv文件是没有header的,为了增加header,可以选择“Custom - display all possible options”,勾选“Put columns names in the first row”

mysql 一对多 join_mysql多表left join 1对多的解决办法相关推荐

  1. mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣

    Mysql中的FIND_IN_SET函数在我知道它之前,我在做一个一对多的外键查询时,都会在中间设计一个关系表.比如一篇文章(post)对应多个标签(tag),我就会在中间设计一个关系表(post_t ...

  2. ora-01652:无法通过128(在表空间space中)扩展temp段解决办法

    ora-01652:无法通过128(在表空间space中)扩展temp段解决办法.这种情况一看是当前用户所在的表空间达到32G大小上限,需要增加一个新的表空间 一.查询当前用户表空间 select u ...

  3. mysql json坑_使用mysql innodb 使用5.7的json类型遇到的坑和解决办法

    ---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp #创建 ...

  4. mysql保存时乱码了_MySQL保存中文乱码的原因和解决办法

    (3)MySQL的字符集设置. 这个是重点了,一般都是在这里搞错而出现了mysql乱码. mysql编码设置可以分为三种设置:数据库的编码.表的编码.和字段的编码. a.数据库的编码: 在sqlyog ...

  5. 使用mysql innodb 使用5.7的json类型遇到的坑和解决办法

    ---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp#创建虚 ...

  6. doesnt exist table_Mysql创建表时报错Table doesn't exist解决办法

    最近做项目时,本地数据库出了毛病,PHPMyadmin中有几张表不见了,我想应该是误删了吧,于是准备重新建一张表,可是问题出现了,sql报错,说表不存在... 什么鬼!就是因为表不存在我才要创建的好吗 ...

  7. Linux 3306漏洞,中危漏洞“MySQL,3306,内部敏感服务对外开放存在风险,容易引起安全问题”解决办法...

    一.为什么会报MySQL,3306,内部敏感服务对外开放? mysql默认是不允许远程访问服务器的,就像我们本地去访问mysql数据库,它默认是不允许的:如果你有开启远程访问,允许任何地址都能访问你的 ...

  8. mysql使用中遇到的问题吗_MySQL使用中遇到的问题及解决办法

    [问题一]在安装配置MySQL多实例时,出现以下问题 ................................................................ [root@lo ...

  9. Thinkphp 使用过程中,模型中使用其它表却总是没起作用的解决办法

    事由:因为之前的表需要重新命名(前提,模型名称没有修改),导致了很多数据的不正常读取 解决办法:找到thinkphp所使用的缓存文件目录   runtime  文件夹下面  找到  对应该的data/ ...

  10. MYSQL执行sql时报错:Table 'performance_schema.session_status' doesn't exist解决办法

    1.今天,在本地mysql底下执行sql时报错了,报错信息是Table 'performance_schema.session_status' doesn't exist,百度了一下说解决办法是进入m ...

最新文章

  1. 计算机组装与维修属于什么类,《计算机组装与维修》课程学业水平测试卷(样卷 答案)...
  2. 数据挖掘算法学习(四)PCA算法
  3. 排序算法四:归并排序基本原理以及Python实现
  4. 专业音频如何把电平转换成dbu_谭俊峰|录课、买麦,你应该了解的音频常识
  5. Linux OpenSSL获取证书指纹值(443、MD5、SHA1、SHA256)
  6. Gerchberg–Saxton算法
  7. Xcode启动RN报错“`fsevents` unavailable“
  8. spingCloud 整合netty
  9. Wireshark实战分析之ARP协议(一)
  10. UDP打洞原理及代码
  11. 计算机如何取消自动关机,如何取消自动关机命令
  12. python实战项目
  13. NMAKE makefile内容和功能(1):描述块
  14. bitset——定义及常用操作。
  15. 视频与编解码的技术邂逅,碰撞出的高清罗曼史
  16. 计算任意2个日期内的工作日(没有考虑到国定假日
  17. 关闭开机弹窗广告2345(其他弹窗也适用)
  18. gcd euclid_使用EUCLID的算法找到两个数字的GCD(最大公约数)
  19. jQWidgets Crack 用于响应式 Web 开发
  20. LeetCode-179-最大数

热门文章

  1. HttpUrlConnection的简单使用--get和post的简单使用
  2. 安卓EventBus的使用方法
  3. 入门React第二天(函数式组件传值)
  4. http重定向到https
  5. linux7.2 网卡设置,CentOS 7.2网络配置
  6. PHPMailer 报错:SMTP ERROR: Failed to connect to server: (0)
  7. 如何验证 nginx.conf 是否配置正确
  8. js中将字符串作为函数名来调用的方法
  9. Yii Framework2.0开发教程(5)数据库mysql函数
  10. 跟人合作人工智能,方案没有,钱又不出,这怎么合作?