MySQL 在一行中选择多个 ID 值

MySQL selecting multi ids values in one row

这里是查询:

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

问题是 table t1 一些列(tiekejas、pirkejas、regionas、trasporto_imone、pard_vad、pirk_vad)是一组 id(例如。 1,2,5 等)。此查询 returns 值仅来自集合中的一个 id,我想将其全部放在一行中(换行中的每个值或用点或其他东西分隔,我可以稍后在程序中拆分它们)。现在我把它们分成程序,但我需要 select 从数据库中一个一个地提取它们,这会花费太多时间,而且程序运行速度太慢。

我希望有更好的解决方案。谢谢

这里是 SQL FIDDLE LINK: http://sqlfiddle.com/#!9/d8609/1

编辑: http://postimg.org/image/3sostf42n/

这是我需要得到的,定义的列是t1.tiekejas(例如1,2,5),这个ids在table t3(tiekejai)中有值,通过这个查询它只returns id 1 的一个值,但我需要返回 id 1,2,5 的三个值。

您最初的问题可以使用 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

但是我认为您会对来自每个连接 table 的多个值产生疑问。此外,您正在使用 GROUP BY 来消除多行,并且未定义所选择的特定 invoice_nr / apm_id 的每列的各种值中的哪一个。

请注意,拥有一个包含以逗号分隔的 ID 列表的字段通常也不是一个好主意。它使连接变得比它应该做的更慢和更难(因为索引不能有效地在字段上使用),并且它限制了未来数据的增加。这通常是规范化数据库设计不佳的标志。