2014-02-18 3 views
0

У меня есть большая база данных, насчитывающая около 190 столбцов в 22 таблицах. Существует несколько таблиц, которые позволяют несколько записей в базу данных, все значения ссылаются на внешний ключ. Когда я использую LEFT OUTER JOIN Если в одном столбце, соответствующем определенному идентификатору, имеется несколько записей, он создает новую строку со всей информацией, как раньше, только изменяя поля таблицы. Например:Использование LEFT OUTER JOIN возвращает одну согласованную строку и дополнительные только совпадающие идентификаторы

+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 
| CompanyID | Name      | Address      | City   | State | Zip | Country | Website      | 
+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 
|  227 | Hello Company    | 123 blvd     | Boom   | OK | 56008 | USA  | www.imtired.com    | 
|  228 | Test Company    | 87 Wesley Street   | Denham   | LA | 21726 | USA  | www.tests.com     | 
|  229 | Testing Company   | 2 US hwy 281 N.    | Antonio  | TX | 64258 | USA  | www.modeling.com    | 
|  230 | TestCompany    | 45 W. 95th St    | Oak Lawn  | IL | 61453 | USA  | www.express.com    | 
|  235 | Encore     | 2142 S. Patterson   | City   | IA | 43106 | USA  | www.boomsite.com    | 
|  235 | Encore     | 2142 S. Patterson   | City   | IA | 43106 | USA  | www.testingsite.com   | 
+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 

Вы видите, что компания Encore имеет два ряда с только веб-сайт непохожесть есть способ сделать это следующим образом:

+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 
| CompanyID | Name      | Address      | City   | State | Zip | Country | Website      | 
+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 
|  227 | Hello Company    | 123 blvd     | Boom   | OK | 56008 | USA  | www.imtired.com    | 
|  228 | Test Company    | 87 Wesley Street   | Denham   | LA | 21726 | USA  | www.tests.com     | 
|  229 | Testing Company   | 2 US hwy 281 N.    | Antonio  | TX | 64258 | USA  | www.modeling.com    | 
|  230 | TestCompany    | 45 W. 95th St    | Oak Lawn  | IL | 61453 | USA  | www.express.com    | 
|  235 | Encore     | 2142 S. Patterson   | City   | IA | 43106 | USA  | www.boomsite.com    | 
|   |       |        |    |  |  |   | www.testingsite.com   | 
+-----------+---------------------------+-----------------------------+----------------+-------+-------+---------+-------------------------------+ 

Это фрагмент из I запроса используя:

SELECT * FROM `company` C 
LEFT OUTER JOIN owner O USING (CompanyID) 
LEFT OUTER JOIN sales S USING (CompanyID) 
+1

Этот тип модификации данных, вероятно, лучше всего сделать на уровне приложения. Просто следите за компанией, а во втором и последующих случаях забудьте о столбцах, которые вы хотите закрыть. –

+0

Помог ли мой ответ решить вашу проблему? – rakeshjain

+0

Да, спасибо, но я прокомментировал с предпочтением. Я продолжаю получать синтаксическую ошибку, если я удалю запятую и попробую использовать '\ r' – Yamaha32088

ответ

1

Вы можете попробовать что-то подобное в mySQL. Он будет предоставлять сайты с разделителями-запятыми всякий раз, когда имеется несколько строк со всем, кроме тех, что указаны на сайте

SELECT *,GROUP_CONCAT(website,',') as website FROM `company` C 
LEFT OUTER JOIN owner O USING (CompanyID) 
LEFT OUTER JOIN sales S USING (CompanyID) 
GROUP BY CompanyID 
+0

Это отлично работает, но я бы предпочел новую строку, поэтому я использую \ r, но я продолжаю получать запятую, я бы предпочел просто иметь новую строку и никакую запятую, я использую '' SELECT *, GROUP_CONCAT (TradeShowName, '\ r') в качестве TradeShowName FROM 'tradeshownamesattended' C LEFT OUTER JOIN владелец O USING (CompanyID) LEFT OUTER JOIN sales S USING (CompanyID) GROUP BY CompanyID'', но я получаю синтаксическую ошибку, если я удалить запятую – Yamaha32088

+0

Можете ли вы помочь мне с правильным синтаксисом, чтобы сделать более одной группы? У меня около шести таблиц, которые содержат несколько записей, которые нужно сгруппировать, как веб-сайт. Я пытаюсь реализовать код таким же образом, но я могу " t понять это может быть пример веб-сайта из таблицы компании и tradeshowname из tradeshownamesattended – Yamaha32088

+0

Я получил эту работу, за исключением того, что теперь каждая строка имеет du складчатая информация для выставок '' SELECT *, GROUP_CONCAT (веб-сайт, '') AS сайта FROM 'company' C LEFT OUTER JOIN владельца O ИСПОЛЬЗОВАНИЯ (CompanyID) LEFT OUTER JOIN продаж S ИСПОЛЬЗОВАНИЯ (CompanyID), ( SELECT TradeShowName, GROUP_CONCAT (TradeShowName, ',') AS tradeshownames FROM 'tradeshownamesattended' TSA ) AS tradeshownamesA GROUP BY CompanyID'' – Yamaha32088

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