PHP PDO SQlite单查询查找值,只有一个出现,在行与逗号分隔的值


PHP PDO SQlite single query to find values with only one occurence, in rows with comma separated values

例如,我有以下表格:

 id  Name - Target 
 1    A       B     
 2    C       D,G      
 3    E       D
 4    F       G,B
 5    L       M,D,B
 6    Q       G,N

我有一个超过200万条记录的数据库,我认为我通过在一行中存储逗号的值犯了一个错误。我的目标是查询整个数据库的"目标"行,唯一的,不重复的值,在我的例子中,查询应该只返回"M"answers"N",因为"B","D"answers"G"是重复的。

是否有一个单独的查询行来完成这个?

我同意你应该改变你的数据库模式。

你的问题看起来像是:

https://stackoverflow.com/a/17942691/4421474

所以你的方法如果你真的需要一个可以像这样:

http://sqlfiddle.com/!9/0c3ce/4

SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(t1.Target, ',', numbers.n), ',', -1) letter
FROM
  numbers 
INNER JOIN t1
  ON CHAR_LENGTH(t1.Target)
     -CHAR_LENGTH(REPLACE(t1.Target, ',', ''))>=numbers.n-1
GROUP BY letter
HAVING COUNT(*)=1

注意,您需要设置numbers表的值从1到max,索引表中target列的值

相关文章: