Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从子选择中选择不存在的列?_Sql_Oracle_Sql Subselect - Fatal编程技术网

Sql 如何从子选择中选择不存在的列?

Sql 如何从子选择中选择不存在的列?,sql,oracle,sql-subselect,Sql,Oracle,Sql Subselect,在acc_co表中,没有客户id列。但当我运行select时,它有一个结果。但是怎么做呢 (此选择的结果与cust表的行号相同。)在列前面加上前缀应该可以回答以下问题: select * from cust where cust_id in (select cust_id from acc_co where objectum = 'EXIST'); VS 您会注意到第一个版本失败,第二个版本显示了您看到的行为(您将获得完整的cust表) 第一个版本尝试执行您认为对查询执行的操作:选择一个不存

acc_co表中,没有客户id列。但当我运行select时,它有一个结果。但是怎么做呢


(此选择的结果与cust表的行号相同。)

在列前面加上前缀应该可以回答以下问题:

select * from cust
where cust_id in
(select cust_id from acc_co
where objectum = 'EXIST');
VS

  • 您会注意到第一个版本失败,第二个版本显示了您看到的行为(您将获得完整的
    cust
    表)
  • 第一个版本尝试执行您认为对查询执行的操作:选择一个不存在的列
  • 第二个版本显示了oracle实际如何解释您的查询
  • 谷歌的主题是表别名,有很多页面可以很好地解释它们
  • 通常使用别名来避免这种情况是一种很好的做法
  • 当列名仅出现在查询的一个表中时,oracle允许您不使用类似于查询中的别名
  • 一旦一列出现在多个表中,oracle就会抛出一个错误:
    ORA-00918:定义不明确的列

HTH

在列前面加上前缀应该可以回答以下问题:

select * from cust
where cust_id in
(select cust_id from acc_co
where objectum = 'EXIST');
VS

  • 您会注意到第一个版本失败,第二个版本显示了您看到的行为(您将获得完整的
    cust
    表)
  • 第一个版本尝试执行您认为对查询执行的操作:选择一个不存在的列
  • 第二个版本显示了oracle实际如何解释您的查询
  • 谷歌的主题是表别名,有很多页面可以很好地解释它们
  • 通常使用别名来避免这种情况是一种很好的做法
  • 当列名仅出现在查询的一个表中时,oracle允许您不使用类似于查询中的别名
  • 一旦一列出现在多个表中,oracle就会抛出一个错误:
    ORA-00918:定义不明确的列

HTH

问题是您不使用别名,因此DBMS认为
cust\u id
是第一个表
cust
的一列。由于使用的是相关子查询,因此子查询中的数据可以识别为内部表的数据,也可以识别为外部表的数据。这种情况不仅适用于Oracle,而且适用于任何RDBMS。为了避免这种歧义,请在相关子查询中使用别名。

问题是您不使用别名,因此DBMS认为
cust\u id
是第一个表
cust
的一列。由于使用的是相关子查询,因此子查询中的数据可以识别为内部表的数据,也可以识别为外部表的数据。这种情况不仅适用于Oracle,而且适用于任何RDBMS。为了避免这种歧义,请在相关子查询中使用别名。

我看到了,谢谢,但是为什么在运行原始select?@APC时选择CUST表的所有行呢?因为午餐准备好了^^^,我仍然想提供一些东西来快速操作,然后稍后再写一些信息,以防他还有问题。但是感谢您添加范围信息。kr@APC我应该现在通过编辑将您的解释添加到答案中,还是将您的解释保留在评论中?这里的程序是什么?我看到了,谢谢,但是为什么在我运行最初的select时选择CUST表的所有行?@APC因为午餐已经准备好了^^,我仍然想提供一些东西来快速操作,然后在以后写一些信息,以防他仍然有问题。但是感谢您添加范围信息。kr@APC我应该现在通过编辑将您的解释添加到答案中,还是将您的解释保留在评论中?这里的过程是什么?您编写了一个相关子查询,如果子查询的
where
子句中有
cust\u id=cust\u id
,则会产生类似于
cust\u id
的比较结果,例如
where objectum=cust\u id
,您仍然会觉得这很奇怪吗?您编写了一个相关子查询,结果类似于
cust\u id=cust\u id
,如果
cust\u id
在子查询的
where
子句中,例如
where objectum=cust\u id
,您仍然会觉得这很奇怪吗?
select * from cust c
where c.cust_id in
(select c.cust_id from acc_co a
where a.objectum = 'EXIST');