I have two table X & Y:
Table X
id | Value |
---|---|
1 | "a,b,c,d" |
2 | "b,c" |
3 | "a,c,d" |
4 | "a,b,c" |
5 | "a,d" |
6 | "b,d" |
Table Y
id | Filter |
---|---|
1 | "a,d" |
And I want to get join table contain "a" & "d", result :
id | Value |
---|---|
1 | "a,b,c,d" |
3 | "a,c,d" |
5 | "a,d" |
— I have tried this:
DROP TEMPORARY TABLE IF EXISTS `x`;
CREATE TEMPORARY TABLE `x`
SELECT 1 as id, "a,b,c,d" as `value`
UNION SELECT 2 as id, "b,c" as `value`
UNION SELECT 3 as id, "a,c,d" as `value`
UNION SELECT 4 as id, "a,b,c" as `value`
UNION SELECT 5 as id, "a,d" as `value`
UNION SELECT 6 as id, "b,d" as `value`;
SELECT * FROM x;
DROP TEMPORARY TABLE IF EXISTS `y`;
CREATE TEMPORARY TABLE `y`
SELECT 1 as id, "a,d" as `filter`;
SELECT * FROM y;
SELECT x.id, x.`value`
FROM `x`
JOIN `y` ON x.`value` LIKE CONCAT('%', y.`filter`, '%');
— But the result only get id ‘5’, ‘a,d’.
2
Answers
Thank you Paul Maxwell, user2260040, ooxvyd for the answer. I will split table Y as a Row.
You appear to wish to filter the rows in Table X depending on the values in Table Y. This may be accomplished by utilizing MySQL’s
FIND_IN_SET
function, which is handy for searching for a value in a comma-separated list.