2013-06-09 3 views
0

У меня есть 2 таблицы mysql таблица 1 и таблица 2.
В таблице 1 содержится поле «subjectcat» типа varchar, которое содержит идентификаторы предметов, разделенные запятыми (например, 1,2,3).
Таблица 2 содержит поле «отметка» типа float, содержащее отметку студента. Я хочу, чтобы получить сумму знаков из таблицы 2, где при условии идентификаторов из таблицы 1.Соединительный стол Mysql

У меня есть запрос

select t1.subjectcat, sum(t2.mark) 
    from table t1, table t2 
    where t2.subjectid in (t1.subjectcat). 

, но этот запрос не будет давать правильные знаки суммы, но дает знак только первый предмет (субъект).

Как я могу изменить запрос, чтобы получить правильный результат?

+0

Можете ли вы опубликовать структуру таблицы? –

+0

Нормализовать вашу схему db, и у вас не будет таких проблем – peterm

ответ

0

Вы можете использовать FIND_IN_SET() в JOIN для достижения вашей цели

SELECT t1.subjectcat, SUM(t2.mark) sum_mark 
    FROM table1 t1 JOIN table2 t2 
    ON FIND_IN_SET(t2.subjectid, t1.subjectcat) > 0 

Вот SQLFiddle демо

Сказав, что я настоятельно рекомендую вам нормализовать дб схему.

+0

Запрос работал отлично. Тхак тебе, Петермен. –

0

Это нормально, что он возвращает только одну строку из-за совокупности SUM(). Попробуйте поставить GROUP BY t2.subjectid в конце вашего запроса, если он решает вашу проблему.