我一直在尝试使用“group_concat”构建IN()中使用的值列表,但即使仔细制作逗号分隔的单引号值字符串似乎也不起作用。即使group_concat的显示值为'de','es','fr',并且一个记录的结果集不正确地返回,以下操作也不会在group_concat'ed列表中“查找”“fr”;MySQL - 是否可以在IN()语句中使用group_concat?
SELECT Message, table_id FROM Tenant
LEFT JOIN Translation on Translation.table_id=Tenant.ID
WHERE table_name='Tenant' AND table_column='Message' AND Tenant.ID=2
GROUP BY table_name, table_column, table_id HAVING 'fr' NOT
IN(group_concat(CONCAT('''', language, '''')));
而下面, “FR” 的确是发现和ResultSet是适当空:
SELECT Message, table_id FROM Tenant
LEFT JOIN Translation on Translation.table_id=Tenant.ID
WHERE table_name='Tenant' AND table_column='Message' AND Tenant.ID=2
GROUP BY table_name, table_column, table_id HAVING 'fr' NOT IN('de','es','fr')
我知道我可以用locate();
SELECT Message, table_id FROM Tenant
LEFT JOIN Translation on Translation.table_id=Tenant.ID
WHERE table_name='Tenant' AND table_column='Message' AND Tenant.ID=2
GROUP BY table_name, table_column, table_id HAVING LOCATE('de',
group_concat(language)) = 0
但这样的文本搜索可能效率不高相比,“IN()”,这可能是由MySQL优化计划不同。我已经尝试了所有我知道的技巧(演员(),试图重组列表等),我刚刚出现。我不确定这是否是group_concat的限制,或者甚至是MySQL编译器中的“bug”。如果任何人有任何好的想法,我会非常感激。
感谢
这整个方法听起来对我来说是狡猾的,但请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to -be-a-very-simple-sql-query – Strawberry