需要有关SQL查询的帮助 - 在一个数据字段中选择包含重复多个数据条目的数据

时间:2016-06-10 05:26:08

标签: mysql sql

我需要选择所有具有非重复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,

什么查询对此有用?任何帮助?

1 个答案:

答案 0 :(得分:0)

最好的方法是normalize您的数据,如评论中所述。但是如果你绝对必须这样做,那么在查询mysql时会非常困难。

我建议你为它创建一个程序。当您开发每个步骤时,您可以谷歌该步骤的特定解决方案,并测试它并在此基础上进行构建。如果任何步骤混淆/不清楚,请告诉我。

  1. 创建一个变量字符串,比如v_vals。初始化为null。在程序结束时,它将包含id_list的所有不同值(1314 ... 20
  2. 遍历每一行。
  3. 计算id_list中的逗号数。
  4. 从1循环到逗号数。
  5. 在每次迭代中,使用substringinstring查找每个逗号的位置,然后从id_list中提取值。 (1314 ...)
  6. 使用另一个变量v_id_list。将null放入其中。
  7. v_vals中搜索值(来自步骤5)。如果它们存在于v_val中,则跳过它们,否则将它们放入v_valv_id_list
  8. 现在运行更新语句,使用id_list更新v_id_list
  9. 现在为每一行重复步骤38

    1. 请注意,v_id_list将针对每个循环重新初始化,但v_val将包含id_list的所有不同值。