标签: table-alias

何时使用SQL表别名

我很想知道人们如何使用表别名.我工作的其他开发人员总是使用表别名,并且总是使用a,b,c等的别名.

这是一个例子:

SELECT a.TripNum, b.SegmentNum, b.StopNum, b.ArrivalTime
FROM Trip a, Segment b
WHERE a.TripNum = b.TripNum
Run Code Online (Sandbox Code Playgroud)

我不同意他们的看法,认为表别名应该更加谨慎使用.

我认为在查询中包含两次相同的表时应该使用它们,或者当表名很长并且在查询中使用较短的名称时,将使查询更容易阅读.

我也认为别名应该是一个描述性的名称,而不仅仅是一个字母.在上面的例子中,如果我觉得我需要使用1个字母的表别名,我会使用t表示Trip表,而s表示段表.

sql database table-alias

31
推荐指数
4
解决办法
4万
查看次数

为什么在Oracle SQL中选择指定的列,而且全部错误?

说我有一个选择声明..

select * from animals
Run Code Online (Sandbox Code Playgroud)

这给出了表中所有列的查询结果.

现在,如果表格的第42列animalsis_parent,并且我想在我的结果中返回它,之后gender,我可以更容易地看到它.但我也想要所有其他专栏.

select is_parent, * from animals
Run Code Online (Sandbox Code Playgroud)

这回来了ORA-00936: missing expression.

同样的语句在Sybase中可以正常工作,我知道你需要在表中添加一个表别名animals才能使它工作(select is_parent, a.* from animals ani),但为什么 Oracle需要一个表别名才能计算出选择?

sql oracle table-alias ora-00936

23
推荐指数
1
解决办法
1万
查看次数

如何使用'as'关键字为Oracle中的表别名?

我正在尝试在Oracle SQL Developer中执行此查询:

SELECT G.Guest_ID, G.First_Name, G.Last_Name
FROM Guest AS G
  JOIN Stay AS S ON G.Guest_ID = S.Guest_ID
WHERE G.City = 'Miami' AND S.Room = '222';
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Error at Line: 2 Column: 12
Run Code Online (Sandbox Code Playgroud)

我在第2行看不到任何问题,错误不是很具描述性.它似乎与as关键字有关.如果我删除它,它工作正常.但是,我希望我的查询非常详细.因此,我必须找到一种方法来解决问题,而无需删除as关键字.

这是涉及的表的结构:

CREATE TABLE GUEST
(
  GUEST_ID       NUMBER               NOT NULL,
  LAST_NAME      VARCHAR2(50 BYTE),
  FIRST_NAME     VARCHAR2(50 BYTE),
  CITY           VARCHAR2(50 BYTE),
  LOYALTY_NUMBER VARCHAR2(10 BYTE)    
);

CREATE TABLE STAY …
Run Code Online (Sandbox Code Playgroud)

sql oracle table-alias

15
推荐指数
1
解决办法
2万
查看次数

有没有办法在Oracle 11g SQL中为子查询提供别名?

有没有办法在Oracle 11g中为子查询提供如下别名:

select * 
from
    (select client_ref_id, request from some_table where message_type = 1) abc,
    (select client_ref_id, response  from some_table where message_type = 2) defg
where
    abc.client_ref_id = def.client_ref_id;
Run Code Online (Sandbox Code Playgroud)

否则,有一种方法可以基于client_ref_id加入两个子查询.我意识到有一个自连接,但在数据库上我运行的自连接可能需要5分钟才能完成(在我运行的实际查询中有一些额外的逻辑,但我已确定自联接是什么导致问题).各个子查询只需几秒钟即可完成.自联接查询类似于:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;
Run Code Online (Sandbox Code Playgroud)

sql oracle subquery oracle11g table-alias

14
推荐指数
2
解决办法
4万
查看次数

如何在初始where语句中使用Arel :: Nodes :: TableAlias

我坚持这个并且肯定很容易,但我在文档中找不到解决方案.

我有一些树结构和子where where子句,我必须使用"exists"子查询进行过滤:

current_node.children.as("children_nodes").where(Node.where(...).exists)
Run Code Online (Sandbox Code Playgroud)

Node.where.clause已经加入了children_nodes,如果我使用两个不同的模型,它就可以工作.但是我该如何使用别名呢?以上代码将导致:

NoMethodError (undefined method `where' for #<Arel::Nodes::TableAlias
Run Code Online (Sandbox Code Playgroud)

它是如此基本,但我缺少的东西(我太新了).

ruby ruby-on-rails arel table-alias

12
推荐指数
2
解决办法
2017
查看次数

oracle:你能为from子句分配一个别名吗?

你能为from子句分配一个别名吗?喜欢:

select a - b "Markup" from retail a, cost b;
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,我输入的速度有点过快,并试图将问题简化到没有任何意义的地步

我实际上想要做的是使用别名来比较同一个表中两个发布日期之间的月份.这是我发现的作品:

select distinct to_char(months_between((select distinct pubdate
                                        from books3 
                                        where pubid = 2), 
                                       (select distinct pubdate 
                                        from books3 
                                        where pubid = 4)), '99.99') "Answer"
                              from books3
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

select distinct months_between(a,b)
from (select distinct pubdate 
       from books3 
       where pubid = 2 as a), 
     (select distinct pubdate 
      from books3 
      where pubid = 4 as b)
Run Code Online (Sandbox Code Playgroud)

但那不起作用

sql oracle table-alias

10
推荐指数
1
解决办法
4万
查看次数

SQL命令没有正确结束?

我正在使用具有临时关系的SQL语句,并且我收到错误 ORA-009933: SQL command not properly ended

我没有看到该陈述有任何问题,所以非常感谢任何帮助.声明是:

SELECT Temp.name,
       Temp.AvgSalary
FROM   (SELECT A.aid,
               A.aname       AS name,
               AVG(E.salary) AS AvgSalary
        FROM   Aircraft A,
               Certified C,
               Employees E) AS Temp; 
Run Code Online (Sandbox Code Playgroud)

谢谢

sql oracle ora-00933 table-alias

9
推荐指数
2
解决办法
2万
查看次数

什么时候需要在SQL中为表名提供别名?

我注意到在使用多个JOIN进行查询时,我的查询不起作用,除非我给其中一个表名别名.

这是一个简单的例子来解释这一点:

不起作用:

SELECT subject
from items
join purchases on items.folder_id=purchases.item_id
join purchases on items.date=purchases.purchase_date
group by folder_id
Run Code Online (Sandbox Code Playgroud)

这样:

SELECT subject
from items
join purchases on items.folder_id=purchases.item_id
join purchases as p on items.date=p.purchase_date
group by folder_id
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

sql alias join table-alias

6
推荐指数
2
解决办法
5673
查看次数

MySQL:AS 别名中可以有通配符吗?

我有一堆跨多个表命名相同的字段(我继承了它 - 不要责怪我;)。

是否可以通过通配符自动分配/添加别名,而不是详细设置所有别名?

我正在设想类似的东西(当然这实际上并不起作用):

SELECT t1.*,t2.* as alias2.*, t3.* as alias3.*
Run Code Online (Sandbox Code Playgroud)

所以我会得到返回的字段,例如:

name, address, city, state
alias2.name, alias2.address, alias2.city, alias2.state
alias3.name, alias3.address, alias3.city, alias3.state
Run Code Online (Sandbox Code Playgroud)

mysql sql alias wildcard table-alias

5
推荐指数
1
解决办法
1745
查看次数

Yii2不唯一的表/别名:'user'

在"Ticket"模型中:

public function getUser()
{
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}


public function getSupervisor()
{
    return $this->hasOne(User::className(), ['id' => 'supervisor_id']);
Run Code Online (Sandbox Code Playgroud)

在"TicketSearch"模型中:

    $query->joinWith(['user','supervisor']);

    $query
        ->andFilterWhere(['like', 'user.surname', $this->user_id])
        ->andFilterWhere(['like', 'user.surname', $this->supervisor_id]
Run Code Online (Sandbox Code Playgroud)

如果我尝试搜索主管,请收到此错误:

Not unique table/alias: 'user'
The SQL being executed was: SELECT COUNT(*) FROM `ticket` LEFT JOIN `user` ON `ticket`.`user_id` = `user`.`id` LEFT JOIN `user` ON `ticket`.`supervisor_id` = `user`.`id` WHERE `user`.`surname` LIKE '%surname4%'
Run Code Online (Sandbox Code Playgroud)

我试图更改名称用户表:

    public function getSupervisor()
    {
        return $this->hasOne(User::className(), ['id' => 'supervisor_id'])
->from(User::tableName() . 'u2');
    }
Run Code Online (Sandbox Code Playgroud)

但是这个错误返回了:

You have an error …
Run Code Online (Sandbox Code Playgroud)

table-alias yii2

4
推荐指数
1
解决办法
6615
查看次数