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

标签 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,

什么查询对此有好处?有什么帮助吗?

最佳答案

处理它的最佳方法是规范化您的数据,如评论中所述。但是如果你一定要这样做的话,在mysql的查询中就很难做到了。

我建议您为其创建一个过程。当您开发每个步骤时,您可以在谷歌上搜索该步骤的特定解决方案,并对其进行测试并在此基础上进行构建。如果有任何步骤听起来令人困惑/不清楚,请告诉我。

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

现在对每一行重复步骤 38

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

关于mysql - 需要有关 SQL 查询的帮助 - 在一个数据字段中选择具有重复多个数据条目的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740491/

相关文章:

mysql - mysql中的 "three way data binding"怎么办?

mysql - 在同一查询中使用 MySQL SELECT 查询的结果作为 WHERE 条件

sql - 检测笛卡尔积或其他不敏感的查询

sql - 用列中最长数据的长度设置子串长度

mysql 将列标题更改为行标题

mysql - 如何在按小时分组时获得三小时滚动平均值?

php - 如何在不打开安全的情况下使用textarea标签

python - Django + PyMSQL + WSGI

php - 在 PHP 中创建链接的点击计数

MySQL 内连接子句字段未找到