【问题标题】:MySQL innerjoin on an array field数组字段上的 MySQL 内部联接
【发布时间】:2017-04-19 09:38:23
【问题描述】:

我有两张桌子

[系列]

--------------
ID | ART
--------------
1  | sculptor      
2  | painter
3  | writer
-----------

[艺术家]

--------------
NAME | ART_IDs
--------------
john | 1
jack | 1,2
jill | 2,1
jeff | 3,1

我想这样加入:

SELECT se.art, ar.name as artist
FROM series AS se
JOIN artists AS ar ON FIND_IN_SET(se.id , ar.art_ids) > 0

我得到的只是第一个值:

[结果]

-------------------
ART      | ARTISTS
-------------------
sculptor | john
sculptor | jack
painter  | jill
writer   | jeff

代替:

[结果]

----------------------------
ART               | ARTISTS
----------------------------
sculptor          | john
sculptor,painter  | jack
painter,sculptor  | jill
writer,sculptor   | jeff

【问题讨论】:

标签: mysql


【解决方案1】:

试试这个:

SELECT GROUP_CONCAT(se.art ORDER BY FIND_IN_SET(se.id , ar.art_ids)) as art, ar.name as artist
FROM series AS se
JOIN artists AS ar ON FIND_IN_SET(se.id , ar.art_ids) > 0
GROUP BY ar.name

如果您想在每个组中连接列,GROUP_CONCAT 可以帮助您。

在 Rextester 中检查 demo

【讨论】:

  • 它的结果就像这个雕塑家,雕塑家,雕塑家 |约翰只有 1 行休息 ommited
  • @FaiqAhmad 检查演示。
  • 这是我的实际查询,其中表大小有两个字段 1-id 2-name 我的表产品有 id 和大小 "SELECT group_concat(size.name ORDER BY FIND_IN_SET(eshop_trans.@987654325 @.size, eshop_trans.size.id)) 作为大小,products.id FROM eshop_trans.products join eshop_trans.@9876543835@5436543376 @.products.size, eshop_trans.size.id)>0 group by size.name "
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2012-02-22
  • 2014-01-21
  • 2017-09-26
相关资源
最近更新 更多