gpt4 book ai didi

mysql - 如何获得两列的交集

转载 作者:可可西里 更新时间:2023-11-01 07:59:36 25 4
gpt4 key购买 nike

比如我有表A和表B

a.data = {1,2,3,4,5,6}b.data = {4,5,7}

如果您想在 a.data 或 b.data 中查找一个值,您可以使用 FIND_IN_SET(3, b.data)。但我想知道是否 至少 b.data 的所有值都在 a.data 中,否则我是否可以找到至少 b.data 和 a.data 之间的交集。所以在这种情况下是 {4,5}。

WHERE INTERSECT(a.data, b.data) ... 类似的东西。我应该如何在 MySQL 中执行此操作?

更新

b.data {4,5,7}是1条记录的列数据,所以在b.data上加入a.data是行不通的。

table A  
=======
ID DATA
1 {1,2,3,4,5,6}
2 {7,9,12}

table B
=======
ID DATA
1 {4,5,7}
2 {9,10,11,12}

最佳答案

您可以使用INNER JOIN

对表进行交互

看看Visual explaination of joins

SELECT fn_intersect_string(a.data, b.data) AS result FROM table_name;

您也可以将用户定义的函数编写为:

CREATE FUNCTION fn_intersect_string(arg_str1 VARCHAR(255), arg_str2 VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
SET arg_str1 = CONCAT(arg_str1, ",");
SET @var_result = "";

WHILE(INSTR(arg_str1, ",") > 0)
DO
SET @var_val = SUBSTRING_INDEX(arg_str1, ",", 1);
SET arg_str1 = SUBSTRING(arg_str1, INSTR(arg_str1, ",") + 1);

IF(FIND_IN_SET(@var_val, arg_str2) > 0)
THEN
SET @var_result = CONCAT(@var_result, @var_val, ",");
END IF;
END WHILE;

RETURN TRIM(BOTH "," FROM @var_result);
END;

关于mysql - 如何获得两列的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670216/

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