我想知道这在SQL中是否可行.假设有两个表A和B,在表A上进行 Select ,在表B上进行联接:

SELECT a.*, b.* FROM TABLE_A a JOIN TABLE_B b USING (some_id);

如果表A有"A_id"、"name"和"some_id"列,而表B有"B_id"、"name"和"some_id",则查询将返回"A_id"、"name"、"some_id"、"B_id"、"name"、"some_id"列.有没有办法在不单独列出每一列的情况下为表B的列名添加前缀?这相当于:

SELECT a.*, b.b_id as 'b.b_id', b.name as 'b.name', b.some_id as 'b.some_id'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

但是,如前所述,没有列出每一列,所以类似于:

SELECT a.*, b.* as 'b.*'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

基本上可以说,"在b.*返回的每一列前面加上'something'".这是可能的还是我运气不好?

编辑

关于不使用SELECT *等的建议是有效的建议,但在我的上下文中并不相关,因此请继续解决当前的问题——是否可以在联接中的表的所有列名中添加前缀(SQL查询中指定的常量)?

我的最终目标是能够通过联接对两个表执行SELECT *,并且能够根据我在结果集中得到的列的名称,区分哪些列来自表a,哪些列来自表B.同样,我不想单独列出列,我需要能够执行SELECT *.

推荐答案

我看到两种可能的情况.首先,您想知道是否有用于此的SQL标准,您可以在不考虑数据库的情况下使用该标准.不,没有.第二,你想知道关于一个特定的dbms产品.然后你需要识别它.但我认为最有可能的答案是,您将返回类似"a.id,b.id"的内容,因为这是您需要在SQL表达式中标识列的方式.找出默认值的最简单方法就是提交这样一个查询,看看你得到了什么.例如,如果您想指定点前面的前缀,可以使用"SELECT*FROM a AS my_alias".

Sql相关问答推荐

如何在数组2中获取数组1的计数值

平均SQL

按CTE创建任务表

出现5次后,将所有正斜杠替换为连字符

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

收到%1、%2或%2邮箱的唯一客户

缺少日期标识

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

Postgres SQL查询从字符串中获取邮箱地址

如何在多列上编写具有不同条件的查询?

group-by-clause具有特定列,而不是oracle的toad中的all

在SQL中转换差异表的多列

用另一个表中的特定名称替换 SQL 查询中的 ID.但我的两个表都有多个列

如何将 START 和 END 日期之间的日期差异作为 SQL 中的单独列获取

如何使用 Google BigQuery 中的条件根据特定列值连接列的 N 行?

如何在sparksql查询中使用日期值?

Postgres如何在一个日历周中前进和回填值

使用 regexp_replace 替换所有出现的特殊字符

忽略与给定列匹配的行的 LAG 函数

在给定列中具有特定值的行与 SQL 中的总行数的比率