【问题标题】:Mysql Concatenate Left Join to more than one Column? [closed]Mysql将左连接连接到多个列? [关闭]
【发布时间】:2021-09-16 12:46:40
【问题描述】:

我有一个 MySQL Select 语句,它在左连接中连接标签。

LEFT JOIN tags t on t.tagid = et.tagid1 

但我需要将标签加入其他三列。

我试过了;

  LEFT JOIN tags t on t.tagid = et.tagid1, et.tagid2, et.tagid3 

但我遇到了一个错误。

有没有办法做到这一点?这是完整的选择语句;

SELECT ap.userid,     
        (
            SELECT GROUP_CONCAT(t.tagname)
            FROM entitytag et
            LEFT JOIN tags t on t.tagid = et.tagid1     
            WHERE et.audioid = ap.audioid
        ) tagname,
            FROM audioposts ap 
            LEFT JOIN accounts ac ON ac.id = ap.userid
          WHERE ap.opid = '0'       
            

【问题讨论】:

  • 请告诉我们您的错误。
  • Edit问题并提供minimal reproducible example,即涉及的表或其他对象的CREATE语句(粘贴文本,不要使用图像,不要链接到外部站点),INSERT 用于示例数据 (dito) 的语句以及带有表格文本格式的示例数据的所需结果。

标签: mysql concatenation left-join


【解决方案1】:

on 子句必须有一个表达式来确定是否应该连接给定的一对行;在这里,您要连接 t 个 tagid 为 tagid1、tagid2 或 tagid3 之一的行,因此您需要(在ON 之后):

t.tagid = et.tagid1 or t.tagid = et.tagid2 or t.tagid = et.tagid3

或使用 IN 运算符的等价物:

t.tagId in (et.tagid1, et.tagid2, et.tagid3)

【讨论】:

  • 其实我看错了你的代码。这行得通; LEFT JOIN tags t on t.tagid in (et.tagid1, et.tagid2, et.tagid3)
  • 你可以编辑它,我会选择它吗?
  • 我的部分观点是left join .. on .. = 没有什么神奇的意义; on 之后的内容可以是 any 表达式
猜你喜欢
  • 2021-01-06
  • 2012-03-21
  • 2010-12-31
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2015-03-13
相关资源
最近更新 更多