这是查询:
SELECT
t1.id, t1.data, t1.invoice_nr, t3.tiekejas, t4.uzsakovas, t1.pard_suma, t1.pirk_suma,
t1.transporto_suma, t2.apm_id, t2.apm_data, t2.apm_suma, t2.tipas, t1.terminas,
t5.regionas, t6.imone, t1.masina, t7.vardas, t7.pavarde, t8.vardas, t8.pavarde
FROM
irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.apm_invoice_nr
LEFT JOIN tiekejai t3 ON t1.tiekejas = t3.id
LEFT JOIN uzsakovai t4 ON t1.pirkejas = t4.id
LEFT JOIN regionai t5 ON t1.regionas = t5.id
LEFT JOIN transportas t6 ON t1.transporto_imone = t6.id
LEFT JOIN vadybininkai t7 ON t1.pard_vad = t7.id
LEFT JOIN vadybininkai t8 ON t1.pirk_vad = t8.id
GROUP BY t1.invoice_nr, t2.apm_id
ORDER BY t1.data, t1.invoice_nr
问题是表t1的一些列(tiekejas,pirkejas,regionas,trasporto_imone,pard_vad,pirk_vad)是一组id(例如1,2,5等)。这个查询只返回set中一个id的值,我希望在一行中得到它(新行中的每个值或用点或其他东西分隔,我可以在程序中稍后拆分它们)。现在我把它们分成了程序,但是我被要求从数据库中逐个选择它们,这需要花费太多时间,程序运行得太慢了。
我希望有更好的解决方案。感谢。
这里是SQL FIDDLE LINK:http://sqlfiddle.com/#!9/d8609/1
编辑: http://postimg.org/image/3sostf42n/
这就是我需要得到的,定义列是t1.tiekejas(例如1,2,5),这个id在表t3(tiekejai)中有值,通过这个查询它只返回id 1的一个值,但是我需要返回三个id值1,2,5。
答案 0 :(得分:0)
您可以使用FIND_IN_SET解决初始问题: -
SELECT
t1.id, t1.data, t1.invoice_nr, t3.tiekejas, t4.uzsakovas, t1.pard_suma, t1.pirk_suma,
t1.transporto_suma, t2.apm_id, t2.apm_data, t2.apm_suma, t2.tipas, t1.terminas,
t5.regionas, t6.imone, t1.masina, t7.vardas, t7.pavarde, t8.vardas, t8.pavarde
FROM
irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.apm_invoice_nr
LEFT JOIN tiekejai t3 ON FIND_IN_SET(t3.id, t1.tiekejas)
LEFT JOIN uzsakovai t4 ON FIND_IN_SET(t4.id, t1.pirkejas)
LEFT JOIN regionai t5 ON FIND_IN_SET(t5.id, t1.regionas)
LEFT JOIN transportas t6 ON FIND_IN_SET(t6.id, t1.transporto_imone)
LEFT JOIN vadybininkai t7 ON FIND_IN_SET(t7.id, t1.pard_vad)
LEFT JOIN vadybininkai t8 ON FIND_IN_SET(t8.id, t1.pirk_vad)
GROUP BY t1.invoice_nr, t2.apm_id
ORDER BY t1.data, t1.invoice_nr
但是我认为您将遇到来自每个联接表的多个值的问题。此外,您使用GROUP BY消除多行,并且未定义所选特定invoice_nr / apm_id的每列的各个值之一。
注意,让一个包含逗号分隔的id列表的字段通常也是一个坏主意。它使连接变得比它应该更慢和更难(因为索引不能在字段上有效地使用),并且它限制了数据的未来增加。这通常是数据库设计规范化程度不高的一个标志。