好的,我有点失落......不确定这是不可能还是我错过了什么......
我在“发票”表格中有一个名为“产品”的列,其中包含以逗号分隔的产品ID列表(例如1,2,3),以及另一个名为“products”的表格,我正在尝试使用的SKU获取单个查询并以逗号分隔列表的形式提供,因此如果原始“products”列包含“1,2,3”作为条目,我希望在结果中有另一个“skus”列具有“DD093,RT883,KR933”等条目(与这些产品ID匹配的样本SKU)。
以下是我的工作正常(传递特定的产品ID列表):
SELECT i.*, (SELECT GROUP_CONCAT(sku) FROM products p WHERE p.id IN (1,2,3)) AS skus
FROM invoices i
WHERE 1
ORDER BY i.id DESC
并返回如下内容:
id | products | skus
1 | 1,2,3 | DD093,RT883,KR933
但如果我传递这样的话:
SELECT i.*, (SELECT GROUP_CONCAT(sku) FROM products p WHERE p.id IN (i.products)) AS skus
FROM invoices i
WHERE 1
ORDER BY i.id DESC
查询中断...
那么如何从像这样的子查询中获取i.products中的值?
甚至可能吗?
P.S。 - 在您建议我对数据进行规范化,或者判断我使用这样糟糕的设置之前,请记住它是故意的,因为为每个产品的“发票”表创建单独的记录会使更多的东西复杂化在前端,我不想也不需要去那里。这只是各种各样的日志,并且会使前端显示对于那一列更好,这就是为什么我试图在单个查询中完成它并询问它是否可能 - 如果是,如何?如果没有,我也想对此作出明确答复。
答案 0 :(得分:1)
甚至可能吗?
也许,没有测试就很难说。你可以尝试类似的东西:
SELECT i.*, (
SELECT GROUP_CONCAT(sku) FROM products p
WHERE FIND_IN_SET(p.id, i.products) > 0
) AS skus
FROM invoices i
WHERE 1
ORDER BY i.id DESC