• 欢迎访问VPS岛网站,国外VPS,国内VPS,国外服务器,国内服务器,服务器主机,测评及优惠码,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群

日常中遇到的mysql问题(长期更新)

mysql技术 biao007h 55次浏览 已收录 0个评论

1. mysql一个字段多个值关联另一张

假设表group:

id  group_namenode_id 
1113,11,16,159

表node:

idip
131.1.1.1
112.2.2.2
163.3.3.3
1594.4.4.4

需求:查找出表group中node_id对应的ip

语句:

select t.group_name, (select GROUP_CONCAT(a.ip) from node a where FIND_IN_SET(a.id,t.node_id))nodeip from group t ;

执行结果:

+—–+——————————-

|   1 |   1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4   |      

解释:

GROUP_CONCAT 这个函数作用是把相同的数据放在一起,因为源数据13,11,16,159 要替换成对应的ip,而且保持在一起,所以 用 GROUP_CONCAT(a.ip),[a是node表,后面的node a ,代表把node别名为a,这是为了多次使用可以简写的缘故 ]

 FIND_IN_SET 这个函数是这个语句的关键所在,普通的FIND_IN_SET作用如下:

   

SELECT FIND_IN_SET(‘b’,’a,b,c,d’);

        -> 2

SELECT FIND_IN_SET(‘e’,’a,b,c,d’);

        -> 0

如果第一个字段在第二个字段里面有值,则返回对应位置,没有则返回0

配合where,where FIND_IN_SET(a.id,t.node_id) 就可以解释为,a表id在t表中的node_id有值,限定了查找范围

所以整个语句大概可以这么解释:

从表group中查找   group_name,nodeip(当node表中的id在group表中的node_id有值的时候,查找对应ip放在一起)  、

[()里面是子语句,它的执行结果作为nodeip的值]                            


VPS岛 的文章和资源来自互联网,仅作为参考资料,如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。丨 转载请注明日常中遇到的mysql问题(长期更新)
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址