【问题标题】:SQL Select including Data type and Data valuesSQL Select 包括数据类型和数据值
【发布时间】:2012-10-18 07:57:27
【问题描述】:

如何从表中选择数据并在值中包含数据类型? 例如,我有一个名为 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 语句,但我可能只是输入错误。

【问题讨论】:

  • while 循环中合并两个查询的结果会更容易。您不必必须使用 SQL 完成所有您需要的操作。
  • 这是一个奇怪的要求。为什么两者都需要?

标签: mysql sql types sqldatatypes


【解决方案1】:

你可以SELECT EMPLOYEE.COL1, INFO.DATA_TYPE FROM EMPLOYEE, INFORMATION_SCHEMA.COLUMNS INFO WHERE INFO.TABLE_NAME='EMPLOYEE' AND COLUMN_NAME='COL1' 但要选择更多字段,您必须使用不同的别名再次添加另一个 INFORMATION_SCHEMA.COLUMNS 实例。

但出于多种原因,您不应该这样做。

从技术上讲:CROSS JOIN(FROM 中的表仅以逗号列出)对数据库服务器造成很大压力。 FROM T1, T2 将 T1 的所有行与 T2 的所有行配对并检查结果行。如果 T1 有 n 行,T2 有 m 行,则结果有 n*m 行。

逻辑上 1:您不应该需要返回此信息。当您输入查询(SELECT)时,返回的模式是已知的;查询确定结果列的数据类型。 逻辑2:由于每一行在列中具有相同的数据类型,因此您不需要在每一行中返回类型信息。例如。您的示例返回 1000 名员工的数据将在 每一行 上不必要地传输 AGE 字段为 INTEGER、NAME 为 VARCHAR 等等...

如果您不知道结果的架构(例如,由于生成的查询等),那么上述解决方案对您没有帮助。

【讨论】:

  • Lewyx,谢谢这让我更接近我需要的东西。这是针对我创建了数据网格视图的类项目。我有一个文本框,用户可以在其中输入 SQL 语句并将结果显示在网格中。现在我需要的是采用相同的 SQL 语句并选择相同的列并显示数据类型。我试图避免解析框中的所有文本。理想情况下,除了显示结果的视图之外,我只想有一个显示所选列名及其数据类型的视图。如果一切都失败了,我愿意显示每种数据类型。
  • 我明白了。请注意,在实际应用程序中,必须(出于安全原因)不允许用户直接与 SQL 语句交互。我认为这是出于课堂项目的目的,所以可以。 -- 您的应用程序最常使用的 SQL 连接器可能会获得对列数据类型的完整描述,并且根据您使用的语言/接口,您可能能够提取该信息。读取数据类型仍然不是 SQL 要做的事情。 ;) 如果您指定用于数据库访问的组件,我们可能会进一步提示您。
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2020-11-10
  • 2021-12-07
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多