检查另一个表中是否存在一个表中单元格的内容

时间:2011-04-06 11:57:32

标签: mysql sql

我有2个SQL表:


attributesKey

ID -------------名称

ç--------------松脆

取值--------------软

ř--------------圆

→--------------龙


产生

项---------属性

苹果-------- C,R

橙------ S,R

Bananna ---- L,S

胡萝卜------- L,C


这是我所拥有的问题的简化;但是,我认为应该突出问题。

用户输入他们正在寻找的属性(即Crunchy),我应该显示具有Key值“C”的产品(即“Apple,Carrot”)。 ~SELECT语句的伪代码〜
SELECT * FROM产生AS p WHERE(attributesKey.name =“Crunchy”)AND(p.attributes LIKE attributesKey.id)

我希望这是有道理的。我一直在看它,它只是在屏幕上变成一组随机的形状。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用FIND_IN_SET(str,strlist)之类的:

SELECT * FROM produce AS p WHERE FIND_IN_SET('C', attributes)

您还可以使用ANDOR等逻辑运算符。

但更好的解决方案是创建第三个能够代表两者之间联系的能力。 (如果你的表有数字键,最简单的方法)

produce_attributes (produce_id, attributes_id)

和...

SELECT * 
FROM produce AS p
    LEFT JOIN produce_attributes AS pa ON pa.produce_id = p.id
    LEFT JOIN attributesKey AS ak ON ak.id = pa.attributes_id
WHERE ak.name = 'Crunchy'

修改

您的attributesKey被称为 dictinary表,因为它只会将代码解析为值。而且你在attributesKey和produce之间有多对多的关系。多对多关系由关系数据库管理中的连接表表示(或者至少这是它的最常见表示)。

所以我最推荐你使用数字键和第三张表。

答案 1 :(得分:0)

尝试以下查询 -

SELECT * FROM produce p WHERE p.attributes LIKE '%(SELECT a.id from attributesKey a where a.name="Crunchy")%';