我正在使用包含一些“特殊”列的数据库: 表格的“单元格”包含单个名称,例如像“特纳·威廉”这样的画家;其他一些包含与人员表关联的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]
答案 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,该怎么办?如果用分号分隔三个或三个以上字段怎么办?
请接受以下建议:重组表将容易得多,因此在每一列中始终只有一个值。