我想知道这在SQL中是否可行.假设您有两个表A和B,并在表A上执行选择并在表B上进行连接:
SELECT a.*, b.* FROM TABLE_A a JOIN TABLE_B b USING (some_id);
Run Code Online (Sandbox Code Playgroud)
如果表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);
Run Code Online (Sandbox Code Playgroud)
但是,如上所述,没有列出每一列,所以类似于:
SELECT a.*, b.* as 'b.*'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);
Run Code Online (Sandbox Code Playgroud)
基本上可以说,"b.*返回的每一列都带有'某事'".这可能还是我运气不好?
在此先感谢您的帮助!
编辑:不使用SELECT*等建议是有效的建议,但在我的上下文中不相关,所以请坚持手头的问题 - 是否可以添加前缀(SQL查询中指定的常量)给所有连接中表的列名?
编辑:我的最终目标是能够在两个带连接的表上执行SELECT*,并且能够从我在结果集中获得的列的名称中说明哪些列来自表A以及哪些列来自哪些列从表B.再次,我不想单独列出列,我需要能够做一个SELECT*.
我希望以列名的第一部分是字符串的方式连接列名,第二部分是另一个查询的结果的数字.
例如:
SELECT CONCAT('column', mytable.mycolumn) FROM table ...
Run Code Online (Sandbox Code Playgroud)
这可以通过某种方式完成.这样它不会给我错误,但我没有得到预期的结果,似乎连接不起作用.
我想为由左连接产生的所有列添加前缀。
left_join()当被连接的两个表之间的名称相同时,可以添加后缀。但是,即使它们的名称不同,它也没有始终添加此后缀的选项。并且它没有选项来代替添加前缀。
library(dplyr)
library(nycflights13)
flights2 <- flights %>% select(year:day, hour, origin, dest, tailnum, carrier)
airports2 <- airports
result <- flights2 %>% left_join(airports2, c("dest" = "faa")) %>% head()
Run Code Online (Sandbox Code Playgroud)
结果:
Source: local data frame [6 x 14]
year month day hour origin dest tailnum carrier name
(int) (int) (int) (dbl) (chr) (chr) (chr) (chr) (chr)
1 2013 1 1 5 EWR IAH N14228 UA George Bush Intercontinental
2 2013 1 1 5 LGA IAH N24211 UA George Bush Intercontinental
3 2013 …Run Code Online (Sandbox Code Playgroud)