我很想知道人们如何使用表别名.我工作的其他开发人员总是使用表别名,并且总是使用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表示段表.
说我有一个选择声明..
select * from animals
Run Code Online (Sandbox Code Playgroud)
这给出了表中所有列的查询结果.
现在,如果表格的第42列animals是is_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需要一个表别名才能计算出选择?
我正在尝试在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) 有没有办法在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) 我坚持这个并且肯定很容易,但我在文档中找不到解决方案.
我有一些树结构和子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)
它是如此基本,但我缺少的东西(我太新了).
你能为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语句,并且我收到错误 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)
谢谢
我注意到在使用多个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)
有人可以解释一下吗?
我有一堆跨多个表命名相同的字段(我继承了它 - 不要责怪我;)。
是否可以通过通配符自动分配/添加别名,而不是详细设置所有别名?
我正在设想类似的东西(当然这实际上并不起作用):
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) 在"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)