PHP PDO SQlite单个查询,用于查找仅出现一个值的值,以逗号分隔值的行

时间:2015-10-14 15:16:35

标签: php sqlite

例如,我有下表:

 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万条记录数据库,我认为我通过在行内存储逗号来表示错误。 我的目标是在" Target"上查询整个数据库。对于唯一的非重复值,在我的示例中,查询应仅返回" M"和" N",因为" B"," D"和" G"正在重复..

是否有一条查询行可以完成此操作?

1 个答案:

答案 0 :(得分:0)

我同意您应该更改数据库架构。

您的问题看似重复:

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列中为target表设置值为1到最大值的值。