如何在mysql的另一行中找到列中的值具有相关值

时间:2013-09-04 21:09:14

标签: mysql

已经玩了2个小时,我无法弄明白。在我的MySql表中,我有一个名为'的冲突'它包含一个以逗号分隔的' menu_names'字符串,这是另一列,单击它时无法点击。

每个' menu_name'在字符串中需要该行' menu_name'也有它自己的冲突字符串。

我们说我的桌子上有这四行;

        menu_name                conflicts
        ====================================================
        Apple             |      Banana,Carrot
        Banana            |      Apple,Carrot
        Carrot            |      Apple,Banana
        Bean              |      Carrot

在上面的例子中,我们看看Apple的冲突,看看Banana,Carrot。在检查Banana的冲突时,我们找到了Apple,当我们检查Carrot时,我们也找到了Apple,这样做很好,而且我不想要那个记录。香蕉和胡萝卜也会过去。

当我们看到Bean时,我们发现它与Carrot有冲突。检查Carrot时,我们找不到Bean,这是查询在此示例中返回的唯一记录。

这甚至可以用一个查询吗?

2 个答案:

答案 0 :(得分:3)

首先,Bluefeet是对的。您应该以标准化格式存储数据。也就是说,你应该有一个名为MenuConflicts的表,其中一列为Menu_Name,另一列为Conflict

也就是说,你可以使用find_in_set()

通过奥术联接做你想做的事
select *
from t t1 join
     t t2
     on find_in_set(t2.menu_name, t1.conflicts) > 0
where find_in_set(t1.menu_name, t2.conflicts) = 0;

联接匹配第二个菜单名称在第一个冲突列表中的任何行。然后where子句检查额外的互惠条件。

答案 1 :(得分:0)

SO上有一些答案

你必须要做的就是搜索你正在寻找的值taht用于WHERE LIKE子句

在以下链接中,您将找到一些有关如何操作的示例。

我为你复制了一个

SELECT *
FROM Table
WHERE Field LIKE 'Banana,%'
OR Field LIKE '%,Banana'
OR Field LIKE '%,Banana,%'
OR Field = 'Banana'

现在你必须在他们之间建立关系