我有两个数据库表,如下所示:
>表格
>我
>姓名
>字段(varchar-255)
> FormFields
>我
>姓名
> InputType
Form的示例数据
Id Name Fields 1 Form1 1,2,3 2 Form2 1,2
FormFields的示例数据
Id Name InputType 1 FName TEXT 2 Lname TEXT 3 Email TEXT
现在我写下查询如下:
SELECT * FROM FormFields WHERE Id IN (SELECT Fields FROM Form WHERE Id = 2)
我只得到一条记录如下:
Id Name InputType 1 FName TEXT
但我想要FormFields表的所有记录,其Id存在于Form表的Fields列中.我想要这样的结果:
Id Name InputType 1 FName TEXT 2 Lname TEXT
解决方法
您不能使用IN在逗号分隔的“字符串”中搜索特定值.
您可以使用
您可以使用
FIND_IN_SET
:
SELECT FormFields.* FROM Form INNER JOIN FormFields ON FIND_IN_SET(FormFields.id,Form.Fields) > 0 WHERE Form.Id = 2
结果:
+------+-------+-----------+ | Id | Name | InputType | +------+-------+-----------+ | 1 | FName | TEXT | | 2 | Lname | TEXT | +------+-------+-----------+
话虽如此,我建议创建一个将Forms连接到Fields的多个表.表格结构粗略轮廓:
>表格(身份证,姓名)>字段(id,名称,类型)> FormField(form_id,field_id)