oracle 如何知道查询表的主键[已关闭]

a0zr77ik  于 2023-03-29  发布在  Oracle
关注(0)|答案(1)|浏览(139)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我如何知道一个查询表的主键?
我不能使用像user_constraints或information_schema这样的表。这是因为您没有权限获取其中的信息。
只有一个表和它的字段。假设你有3个字段。

id_stor int,
id_plant int,
id_pdp int,
center VarChar(20)

你在这个表中有很多信息,你用语法WHEREGROUP BY过滤,输出是单行吗?我的意思是,如果我这样做:

SELECT * FROM table1
WHERE center = 'blabl'
GROUP BY id_stor,
id_plant,
id_pdp

我在输出中得到一行?或者我必须修改查询直到假设PK?

nfzehxib

nfzehxib1#

当所有未聚合的列都是常量时,一些数据库支持使用带有GROUP BY子句的SELECT *(例如MySQL fiddle);Oracle没有。
如果您尝试:

SELECT *
FROM   table1
WHERE  center = 'blabl'
GROUP BY
       id_stor,
       id_plant,
       id_pdp

然后你会得到错误:

ORA-00979: not a GROUP BY expression

您需要指定所有列,并聚合不在GROUP BY子句中的列:

SELECT id_stor,
       id_plant,
       id_pdp,
       MAX(center) AS center
FROM   table1
WHERE  center = 'blabl'
GROUP BY
       id_stor,
       id_plant,
       id_pdp

fiddle
我如何知道一个查询表的主键?
使用USER_CONSTRAINTSALL_CONSTRAINTS数据字典表。
我不能使用user_constraints等表
那你就没有权限知道这些信息。
和你的DBA谈谈,向他们询问信息,或者询问查询数据字典的权限。如果他们说没有,那么你真的没有权限知道这些信息。

相关问题