整个查询:
SELECT NULL,
ELT( MOD( A.contact_id, (SELECT count(*) FROM `ak_contact` WHERE `contact_type_id` = 12) )+1, (SELECT CONCAT( "'",GROUP_CONCAT(CAST(contact_id AS CHAR(7)) SEPARATOR "','"),"'" ) FROM `ak_contact` WHERE `contact_type_id` = 12) ) as operator_id,
B.account_id, A.contact_id, A.email
FROM ak_contact A
JOIN ak_accounts B USING (contact_id)
GROUP BY A.email, A.contact_id, B.account_id
ORDER BY A.contact_id DESC
子查询应选择标识号10493、1049511262118001236213405中的一个,每行一个一个:
ELT( MOD( A.contact_id, (SELECT count(*) FROM `ak_contact` WHERE `contact_type_id` = 12) )+1, (SELECT CONCAT( "'",GROUP_CONCAT(CAST(contact_id AS CHAR(7)) SEPARATOR "','"),"'" )
#result: ELT(MOD(3333, 5)+1, '10493','10495','11262','11800','12362','13405')
问题是我不能强迫ELT(A.contact_id,subquery)使用subquery。
或者我怎么做这样的东西:
ELT(MOD(3333, 5)+1, '10493','10495','11262','11800','12362','13405')
主查询内部
最佳答案
您可以使用FIND_IN_SET和一个子查询,该子查询使用GROUP_CONCAT将所有值作为逗号分隔的字符串“104931049511262,…”。
(但请注意,GROUP_CONCAT可以返回的字符串大小受服务器配置的限制。)