例如,我有以下表格:
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
列的值