Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:从联接中收集右侧值_Sql_Mysql_Left Join_Outer Join - Fatal编程技术网

SQL:从联接中收集右侧值

SQL:从联接中收集右侧值,sql,mysql,left-join,outer-join,Sql,Mysql,Left Join,Outer Join,假设一个问题有许多标记,通过一个名为taggings的联接表。我这样做: SELECT DISTINCT `questions`.id FROM `questions` LEFT OUTER JOIN `taggings` ON `taggings`.taggable_id = `questions`.id LEFT OUTER JOIN `tags` ON `tags`.id = `taggings`.tag_id 我想根据一个特定的标签名称,例如“piano”,对结

假设一个问题有许多标记,通过一个名为taggings的联接表。我这样做:

SELECT DISTINCT `questions`.id 
FROM `questions` 
 LEFT OUTER JOIN `taggings` 
  ON `taggings`.taggable_id = `questions`.id 
 LEFT OUTER JOIN `tags` 
  ON `tags`.id = `taggings`.tag_id 
我想根据一个特定的标签名称,例如“piano”,对结果进行排序,使piano位于顶部,然后按字母顺序排列所有其他标签。目前我正在使用此order子句:

ORDER BY (tags.name = 'piano') desc, tags.name
这是完全错误的-我得到的第一个结果甚至没有标记为“钢琴”。我认为我的问题是,我需要以某种方式对标记名进行分组,并对其进行排序测试:我认为对直接的tags.name进行排序是不起作用的,因为结果连接表的结构(如果我只对tags表进行简单的选择,它确实起作用),但我无法了解如何修复它

谢谢你的建议,马克斯

编辑-回复Marcelo重新合并 非常感谢马塞洛-我以前没见过这个。必须更正确地阅读api。 这确实有帮助,但前提是我也选择了coalese子句。也就是说,这个:

SELECT DISTINCT `questions`.id 
FROM `questions` 
 LEFT OUTER JOIN `taggings` 
  ON `taggings`.taggable_id = `questions`.id 
 LEFT OUTER JOIN `tags` 
  ON `tags`.id = `taggings`.tag_id 
 ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name
仍然给出虚假的结果。然而,这:

SELECT DISTINCT `questions`.id, COALESCE(tags.name,'')
FROM `questions` 
 LEFT OUTER JOIN `taggings` 
  ON `taggings`.taggable_id = `questions`.id 
 LEFT OUTER JOIN `tags` 
  ON `tags`.id = `taggings`.tag_id 
 ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name

返回正确的结果。不过我还是想选择问题ID。无论如何肯定越来越近了…

可能是因为
tags.name='piano'
标记时计算结果为
NULL
。name
NULL
。尝试合并(tags.name,”)=“piano”