Я делаю довольно большой SQL, поэтому я прошу прощения за то, что не могу привести более крупный пример моих таблиц.
SELECT
customer_id,
agreement_id,
if( 'network' IN ( GROUP_CONCAT( DISTINCT services.service_code
SEPARATOR ',' ) ),
'Yes','No') as networkservice
FROM customers
INNER JOIN agreement USING(customer_id)
INNER JOIN services USING(agreement_id)
GROUP BY customer_id
У клиента может быть соглашение, а в соглашении может быть много услуг. Я пытаюсь выяснить, является ли «сеть» одной из услуг в этом соглашении.
Поскольку GROUP_CONCAT возвращает список, разделенный запятыми, он идеально подходит для моего случая. Но я не могу заставить его работать, и у меня заканчиваются идеи.
Если есть только один сервис, и этот сервис является «сетевым», он возвращает «да», но если их больше, он возвращает «Нет».
Если я вместо этого использую (INT) service_id, то это не имеет значения, если только INT, который я ищу, находится первым в списке. Но это только для INT, если «сеть» является первой в списке, она возвращает №
Я пробовал:
if( 'network' IN ( CAST(GROUP_CONCAT( DISTINCT services.service_code
SEPARATOR ' ' ) AS CHAR) ),
'Yes','No')
И
if( 'network' IN ( concat('\'',
GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR '\', \'' ),
'\'') ), 'Yes','No')
Я могу привести больше примеров, если мое объяснение звучит запутанно.
Спасибо.