3

クエリ全体:

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

サブクエリは、ID 番号 10493、10495、11262、11800、12362、13405 のいずれかを行ごとに 1 つずつ選択する必要があります。

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) を強制的に動作させることができないことです。または、次のようなものを作成する方法:

ELT(MOD(3333, 5)+1, '10493','10495','11262','11800','12362','13405')

メインクエリの内部

4

2 に答える 2

1

FIND_IN_SET と、GROUP_CONCAT を使用してすべての値をカンマ区切りの文字列 '10493,10495,11262,...' として渡すサブクエリを使用できます。

(ただし、GROUP_CONCAT が返すことができる文字列のサイズは、サーバーの構成によって制限されることに注意してください。)

于 2013-06-18T12:54:49.027 に答える