如何从表中选择数据并将数据类型包含在值中?例如,我有一个名为EMPLOYEE的表,其中包含fname,lastname,phone等。如果这样做:
SELECT * FROM EMPLOYEE
我得到所有专栏。如果我做:
SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'EMPLOYEE' ORDER BY ORDINAL_POSITION
我得到了所有列名及其数据类型。
我需要将两者结合起来,以便将值与数据类型一起显示。
我是SQL的新手,但是我已经在网上搜索了一些内容,并尝试了各种JOIN和UNION语句,但是我可能只是在输入错误的信息。
您可以SELECT EMPLOYEE.COL1, INFO.DATA_TYPE FROM EMPLOYEE, INFORMATION_SCHEMA.COLUMNS INFO WHERE INFO.TABLE_NAME='EMPLOYEE' AND COLUMN_NAME='COL1' 但是要选择更多字段,则必须再次添加另一个别名不同的INFORMATION_SCHEMA.COLUMNS实例。
SELECT EMPLOYEE.COL1, INFO.DATA_TYPE FROM EMPLOYEE, INFORMATION_SCHEMA.COLUMNS INFO WHERE INFO.TABLE_NAME='EMPLOYEE' AND COLUMN_NAME='COL1'
但是出于多种原因,您不应该这样做。
从技术上讲:CROSS JOIN(FROM中的表仅用逗号列出)对数据库服务器造成很大的压力。FROM T1, T2将T1的所有行与T2的所有行配对,并检查结果行。如果T1具有n行,T2具有m,则结果具有n * m行。
FROM T1, T2
逻辑1:您不需要返回此信息。当您输入查询(SELECT)时,返回的架构是已知的。查询确定结果列是什么数据类型。逻辑2:由于每一行在列中具有相同的数据类型,因此不需要在每一行中返回类型信息。例如,您的示例返回1000名员工的数据将不必要地在AGE字段为INTEGER,NAME为VARCHAR等的 每一行 上传输…
如果您以某种方式不知道结果的模式(例如,由于生成查询等),那么上述解决方案将无济于事。