我需要选择所有具有非重复 ID 的数据。 这是我的示例表..
----------------------------------------------------------------------------------
ID | Zip-Code | Search Query | ID_LIST
----------------------------------------------------------------------------------
1 | 1000 | Query Sample 1 | 13,14,15,
----------------------------------------------------------------------------------
2 | 2000 | Query Sample 2 | 16,13,17,
----------------------------------------------------------------------------------
3 | 3000 | Query Sample 3 | 18,17,13,
----------------------------------------------------------------------------------
4 | 4000 | Query Sample 4 | 15,16,17,18,
----------------------------------------------------------------------------------
5 | 5000 | Query Sample 5 | 19, 20,
你可以注意到 ID 1 和 2 有重复,在 ID_LIST 上是 13
2和3也有重复,分别是13和17
我想做的就是让它变成这样......
----------------------------------------------------------------------------------
ID | Zip-Code | Search Query | ID_LIST
----------------------------------------------------------------------------------
1 | 1000 | Query Sample 1 | 13,14,15,
----------------------------------------------------------------------------------
2 | 2000 | Query Sample 2 | 16,17,
----------------------------------------------------------------------------------
3 | 3000 | Query Sample 3 | 18,
----------------------------------------------------------------------------------
5 | 5000 | Query Sample 5 | 19,20,
什么查询对此有好处?有什么帮助吗?
最佳答案
处理它的最佳方法是规范化
您的数据,如评论中所述。但是如果你一定要这样做的话,在mysql的查询中就很难做到了。
我建议您为其创建一个过程。当您开发每个步骤时,您可以在谷歌上搜索该步骤的特定解决方案,并对其进行测试并在此基础上进行构建。如果有任何步骤听起来令人困惑/不清楚,请告诉我。
- 创建一个变量字符串,比如
v_vals
。初始化为空。在程序结束时,它将包含id_list
的所有不同值(13
、14
...20
) - 遍历每一行。
- 计算
id_list
中逗号的个数。 - 从 1 循环到逗号数。
- 在每次迭代中,使用
substring
和instring
找到每个逗号的位置,然后从id_list
中提取值。 (13
,14
...) - 使用另一个变量
v_id_list
。将空值放入其中。 - 在
v_vals
中搜索值(来自第 5 步)。如果它们存在于v_val
中,则跳过它们,否则将它们放入v_val
和v_id_list
中。 - 现在运行一个更新语句,用
v_id_list
更新id_list
。
现在对每一行重复步骤 3
到 8
。
- 请注意,
v_id_list
将在每个循环中重新初始化,但是v_val
将包含id_list
的所有不同值。
关于mysql - 需要有关 SQL 查询的帮助 - 在一个数据字段中选择具有重复多个数据条目的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740491/