例如,我有下表:
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"正在重复..
是否有一条查询行可以完成此操作?
答案 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到最大值的值。