2010-03-23 1 views
0

Got это:MySQL выберите обновление

Table a 
ID RelatedBs 
1 NULL 
2 NULL 

Table b 
AID ID 
1 1 
1 2 
1 3 
2 4 
2 5 
2 6 

Потребность Таблица А иметь разделенный запятыми список, как указано в таблице б. И тогда таблица б устареет:

Table a 
ID RelatedBs 
1 1,2,3 
2 4,5,6 

Это не Рунд через все записи, а просто объявление один «б» на «столе»

UPDATE a, b 
SET relatedbs = CONCAT(relatedbs,',',b.id) 
WHERE a.id = b.aid 

UPDATE: Спасибо, 3 правильных ответов (отмеченный старейшим как ответ)! GROUP_CONCAT - один из них. Не нужно вставлять запятые между идентификаторами с помощью связанных лиц = CONCAT (relatedids, ',', next_id), которые автоматически выполняются GROUP_CONCAT.

+1

Если честно, это, вероятно, плохой выбор в том, как вы управляете своей базой данных. Не сказать, что вы не можете этого сделать, но идея внешних ключей состоит в том, чтобы делать именно то, что у вас есть, а не то, что вы пытаетесь сделать. Какова ваша мотивация? Ваши запросы будут значительно более сложными, если вам когда-нибудь понадобится получить 'RelatedBs' и использовать их в SQL. –

+0

Правда. Но я по-прежнему часто использую запятую, разыскивая иды, когда это отношение один-два. Когда это отношение много-двух, я всегда использую mm-таблицу для обработки отношений. – Tillebeck

ответ

1

Посмотрите в GROUP_CONCAT (выражение)

mysql> SELECT student_name, 
    ->  GROUP_CONCAT(DISTINCT test_score 
    ->      ORDER BY test_score DESC SEPARATOR " ") 
    ->  FROM student 
    ->  GROUP BY student_name; 
1

Вы не можете сделать это в стандартном SQL. Вы можете написать хранимую процедуру для этого. У меня была аналогичная проблема, но я использую PostgreSQL, так что я был в состоянии разрешить его путем написания пользовательской агрегатной функции, так что вы можете делать запросы, как

select aid, concat(id) 
from b group by 
aid 

Update: MySQL имеет функцию GROUP_CONCAT агрегата, так что вы можете сделать что-то вроде

SELECT id,GROUP_CONCAT(client_id) FROM services WHERE id = 3 GROUP BY id 

как указано here.

 Смежные вопросы

  • Нет связанных вопросов^_^