我有以下查询,大部分工作已经完成,但是当其中一个连接的表返回不同数量的结果时,在group_concat()
中返回了太多结果:
select
a.sku, a.ek, a.mwst,
concat('[[', group_concat('{"offer": ', b.offer, ', "minQuantity": ', b.minQuantity, '}') , ']]') offersA,
concat('[[', group_concat('{"offer": ', c.offer, ', "minQuantity": ', c.minQuantity, '}') , ']]') offersB,
concat('[[', group_concat('{"offer": ', d.offer, ', "minQuantity": ', d.minQuantity, '}') , ']]') offersC
from all_prices a
left join all_prices_a b on a.sku = b.sku
left join all_prices_b c on a.sku = c.sku
left join all_prices_c d on a.sku = d.sku
where a.sku in (123,456)
group by a.sku
我得到的结果是(请运行片段查看表格),或者查看fiddle。
<table border=1>
<tr>
<td bgcolor=silver class='medium'>sku</td>
<td bgcolor=silver class='medium'>ek</td>
<td bgcolor=silver class='medium'>mwst</td>
<td bgcolor=silver class='medium'>offersA</td>
<td bgcolor=silver class='medium'>offersB</td>
<td bgcolor=silver class='medium'>offersC</td>
</tr>
<tr>
<td class='normal' valign='top'>123</td>
<td class='normal' valign='top'>154.32</td>
<td class='normal' valign='top'>19</td>
<td class='normal' valign='top'>[[{"offer": 9.65, "minQuantity": 3},{"offer": 9.86, "minQuantity": 1}]]</td>
<td class='normal' valign='top'>[[{"offer": 9.66, "minQuantity": 1},{"offer": 9.66, "minQuantity": 1}]]</td>
<td class='normal' valign='top'>[[{"offer": 9.65, "minQuantity": 1},{"offer": 9.65, "minQuantity": 1}]]</td>
</tr>
<tr>
<td class='normal' valign='top'>456</td>
<td class='normal' valign='top'>48.48</td>
<td class='normal' valign='top'>19</td>
<td class='normal' valign='top'>[[{"offer": 13.30, "minQuantity": 1},{"offer": 13.30, "minQuantity": 1}]]</td>
<td class='normal' valign='top'>[[{"offer": 13.30, "minQuantity": 1},{"offer": 122.00, "minQuantity": 3}]]</td>
<td class='normal' valign='top'>NULL</td>
</tr>
</table>
[[{"offer": 9.66, "minQuantity": 1},{"offer": 9.66, "minQuantity": 1}]]
如果两个数量相等,那么给定sku 123
的数据库中只有一个条目,但offersA为此sku提供了两个不同数量的报价:
[[{"offer": 9.65, "minQuantity": 3},{"offer": 9.86, "minQuantity": 1}]]
我正在使用JavaScript处理后续的结果,所以我可以直接删除重复的结果 - 但是想知道是否存在以下两种更聪明的方式:
a) 查询数据的更妙方法
b) 在查询本身中删除这些重复项的方法