我需要验证Column_1的值是否包含在Column_2的值中。 2列中的数据类型为:
ID | column1 | column2 |
----------------------------
1 | apple | pear,grape, apple |
2 | pear | apple,grape |
3 | apple | apple |
查询应该返回第1行和第3行。
我尝试过类似的东西,但不起作用:
SELECT * FROM `table` as C WHERE column_1 LIKE "%C.column_2%"
答案 0 :(得分:1)
您的比较是倒退的。它应该是:
WHERE column2 LIKE CONCAT('%', column1, '%');
请注意,这将返回如下行:
5 apple pineapple,grapefruit
如果情况不合适,则不应使用LIKE
。 FIND_IN_SET
旨在匹配以列分隔的列表中的项目,因此您可以使用:
WHERE FIND_IN_SET(column1, column2)
但是,如果你这样做,请确保你的逗号周围没有任何空格。
如果你规范化你的桌子会好得多。不应使用以逗号分隔的列表,您应该使用多对多关系表。
答案 1 :(得分:-1)
对于那些雄辩的人,您可以解决如下问题:
table::whereRaw("column1 LIKE CONCAT('%', column2, '%')")