如何在mysql数据库中搜索部分条目?

时间:2019-07-04 21:53:51

标签: mysql

我正在使用包含一些“特殊”列的数据库: 表格的“单元格”包含单个名称,例如像“特纳·威廉”这样的画家;其他一些包含与人员表关联的ID,例如“ ID123”。 但是某些单元格包含两个或多个条目,例如:“ ID123; Turner,William”-它们始终以“;”分隔。

我的问题是: 通常,我可以使用“ SELECT-FROM-LEFT JOIN”之类的选项来进行一次选择。是否有可能使用多个条目? 像

SELECT artwork.nameid, artwork.artist,
       person.fullname
FROM   artworks
LEFT JOIN person ON person.id = [Part of String artwork.artist]

1 个答案:

答案 0 :(得分:2)

关系数据库的重要原理之一是每一列都包含一个值,而不是您所描述的复合值。并且给定列中的值具有相同的类型,而不是变量类型。

因此,您应该通过设置两列来解决您的问题,其中一列用于ID,另一列用于Name。请勿尝试使用分号分隔符将它们存储在同一列中。

CREATE TABLE artworks (
  ...
  PersonID VARCHAR(5),   -- example: ID123
  Name     VARCHAR(100), -- example: Turner, William
  ...
);

也就是说,您也许可以使用某些MySQL string functions来完成您描述的事情。

例如,您可以使用LOCATE(';' artwork.artst)来检测给定字符串中是否存在分号。您可以使用SUBSTRING_INDEX(artwork.artist, ';', 2)从以分号分隔的字段中提取第二个“字段”。

如果您需要处理各种情况,那么解决问题所需的表达式将变得非常复杂,例如,如果列的ID是ID而不是ID,该怎么办?如果用分号分隔三个或三个以上字段怎么办?

请接受以下建议:重组表将容易得多,因此在每一列中始终只有一个值。