tldr; 尝试包含逗号(或其他特殊字符)通常表明列名2存在根本缺陷。
这是一个糟糕的数据库设计。这很糟糕,因为它试图将信息编码为列名1。这不是列名的重点!列名只是记录/元组元素的友好名称 - 仅此而已。在关系代数 (RA) 和 SQL 中,包含信息的是记录/元组。
除了导致难以处理的模式(额外的引用语法)需要基于不断变化的信息(列名和多重性)进行硬编码查询之外,还不可能以灵活的方式与许多 RA 技术一起使用. RA 通常只能处理跨记录的多重性 - 正如发现的那样,这包括连接。
相反,架构应该类似于,比如说:
县州其他栏目
======= ===== ==============
达克哦..
普雷贝尔哦..
例如,密钥在哪里,(State,County)
“其他列”取决于密钥。当然,模型应该相对于捕获的所有其他信息正确规范化。
请注意,上述列名中没有存储任何信息:这些名称只是表示存储在每列中的信息的友好名称。
1现在可以根据需要执行主要用于人类输出/显示的PIVOT 转换。这是输出表(不是模式表!)中的一列,是每组记录值生成的。但是,这是次要问题,不应影响主架构。
如果使用 SQL Server,可以首先 UNPIVOT 填充信息的列名,执行连接,然后重新 PIVOT(给定一组已知的列名)。但是,我不知道这将如何在 MySQL 中完成 - 也许是一个混乱的动态查询。无论如何,这是我会避免的一种方法。
2虽然在裸标识符中不允许使用特殊字符,但在带引号的标识符中使用此类名称是可能的- 例如,`Vancouver, WA` 或带有ANSI 引号的“Vancouver, WA”。但是,请继续阅读此回复的其余部分,该回复反对使用此类标识符。