我在这里有一些脑痉挛。
我有两张桌子:
MAIN: ID,公司名称,地址
SEGMENT ID,Company_id,Segment(company_id链接到MAIN表中的ID)
我想将其导出为csv。每个主行
都有多个段行理想情况下,我的导出会像
一样1, Ford, 123 Main Street, cars, trucks, vans
2, Harley Davidson, 234 Elm Street, motorcycles
3, John Deer, 345 Oak Street, tractors, riding mowers
换句话说,每一行都有可变数量的字段
我以为我可以做点什么
SELECT m.id, m.name, m.address, (select s.segment where m.id = s.company_id)
FROM main m, segment s
但是这会将所有细分放在每一行上。我想我需要在嵌套选择中添加where子句以指定'for current row',但我不知道该怎么做。
可能很清楚,我对MySQL不是很有经验,但有时即使你不是合适的人,公共汽车也会翻过你。
更新:我应该更清楚。我的斗争是获得适当的结果集,而不是实际导出到csv(我使用phpMyAdmin,所以可以干酪那部分)。如下面的RaphaëlAlthaus所示,添加一个Group By短语可以解决问题。
答案 0 :(得分:3)
对于csv导出,您可以连接所有值,并使用group_concat
作为细分。
如果你想要一个带有;
分隔符的csv,你可以这样做:
select concat(m.id,
';',
m.name,
';',
m.address,
';',
group_concat(s.segment separator ';'))
from main m
join segment s on s.company_id = m.Id
group by m.id, m.name, m.address
如果您需要其他分隔符,则必须更改此查询中;
的所有出现次数。
请参阅此示例sqlfiddle。
<强>注意强>
当然,正如tadman所提到的,如果你的一个字段包含分隔符,这将失败。
答案 1 :(得分:0)
SELECT m.*,s.segment FROM main AS m join segment AS s ON(m.id = s.company_id) WHERE 1
添加其他条件
SELECT m.*,s.segment FROM main AS m join segment AS s ON(m.id = s.company_id) WHERE s.segment='car'
答案 2 :(得分:0)
如果您使用的是MySQL查询浏览器,则有一个内置选项可以导出到.csv - 在您按照自己的意愿进行SELECT演奏后 - 并且您不必执行Raphael提到的CONCAT - 只是让订单正确。祝你好运。