gpt4 book ai didi

sql - 使用目标为列的 MySQL 的 "IN"函数?

转载 作者:行者123 更新时间:2023-11-29 03:59:15 25 4
gpt4 key购买 nike

在某个表中,我有一个 VARTEXT 字段,其中包含国家代码的逗号分隔值。该字段名为 cc_list。典型条目如下所示:

'DE,US,IE,GB'

'IT,CA,US,FR,BE'

现在给定一个国家/地区代码,我希望能够高效地找到哪些记录包含该国家/地区。显然,索引这个字段是没有意义的。我可以做以下事情

SELECT * from TABLE where cc_list LIKE '%US%';

但这是低效的。

因为“IN”函数应该是高效的(它对值进行分类),我在考虑

SELECT * from TABLE where 'US' IN cc_list

但这行不通 - 我认为 IN 的第二个操作数需要是值列表,而不是字符串。有没有办法将 CSV 字符串转换为值列表?还有其他建议吗?谢谢!

最佳答案

SELECT  *
FROM MYTABLE
WHERE FIND_IN_SET('US', cc_list)

In a certain TABLE, I have a VARTEXT field which includes comma-separated values of country codes.

如果您希望查询高效,您应该创建一个多对多链接表:

CREATE TABLE table_country (cc CHAR(2) NOT NULL, tableid INT NOT NULL, PRIMARY KEY (cc, tableid))

SELECT *
FROM tablecountry tc
JOIN mytable t
ON t.id = tc.tableid
WHERE t.cc = 'US'

或者,您可以将 ft_min_word_len 设置为 2,在您的列上创建一个 FULLTEXT 索引并像这样查询:

CREATE FULLTEXT INDEX fx_mytable_cclist ON mytable (cc_list);

SELECT *
FROM MYTABLE
WHERE MATCH(cc_list) AGAINST('+US' IN BOOLEAN MODE)

这仅适用于 MyISAM 表并且参数应该是文字字符串(在这种情况下您将无法加入)。

关于sql - 使用目标为列的 MySQL 的 "IN"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com