Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 - Fatal编程技术网

双表的SQL查询

双表的SQL查询,sql,oracle,Sql,Oracle,我运行一个SQL命令,需要获取表b的计数 SELECT A.ENTITY_ID, B.ENTITY_ID FROM structure A, equipment B WHERE A.STRUCTURE_NAME = B.STRUCTURE_NAME AND A.XXXID in (); 表1 结构 A列–18个字符的ID eg–asdfghjklzxcvbnmqw 表2 装备 B列–27个字符,其中前18个字符正好是A列的18个字符eg–ASDFGHJKLZXCVBNMQWPPPOO001

我运行一个SQL命令,需要获取表b的计数

SELECT A.ENTITY_ID, B.ENTITY_ID
FROM structure A, equipment B 
WHERE A.STRUCTURE_NAME = B.STRUCTURE_NAME 
AND A.XXXID in ();
表1

结构

A列–18个字符的ID eg–asdfghjklzxcvbnmqw

表2

装备

B列–27个字符,其中前18个字符正好是A列的18个字符eg–ASDFGHJKLZXCVBNMQWPPPOO001

所以当我提出一个查询时,我得到一个如下的列表

asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppooo001
asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppooo002
asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppxxx001
asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppeee001
asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppeee001
asdfghjklzxcvbnmqw  - asdfghjklzxcvbnmqwpppccc002
我想要的只是计数

asdfghjklzxcvbnmqw  6

您可以使用like或与字符串操纵进行比较:

SELECT s.ENTITY_ID, e.ENTITY_ID
FROM structure s JOIN
     equipment e 
     ON b.STRUCTURE_NAME = SUBSTR(e.STRUCTURE_NAME, 1, 18)
WHERE s.XXXID in (. . .);
请注意我所做的其他更改:

表别名是表名的缩写-阅读查询要简单得多。 查询使用正确的显式联接语法。简单规则:在FROM子句中不要使用逗号。 编辑:

如果需要计数,请使用count*:

或许:

SELECT s.ENTITY_ID, COUNT(*)
FROM structure s JOIN
     equipment e 
     ON b.STRUCTURE_NAME = SUBSTR(e.STRUCTURE_NAME, 1, 18)
WHERE s.XXXID in (. . .)
GROUP BY s.ENTITY_ID;

如果这是你想要的,你可以试试下面的答案

创建视图vTemp作为 选择CountA.ENTITY\u ID作为CountA,A.ENTITY\u ID 从结构A

选择A.countA、A.ENTITY\u ID、B.ENTITY\u ID 来自vTemp A,设备B 其中A.STRUCTURE\u NAME=B.STRUCTURE\u NAME 和A.XXXID in

此选项选择一个实体\u ID,计数* 从结构A到设备B 其中A.STRUCTURE\u NAME=B.STRUCTURE\u NAME 和A.XXXID
a.实体集团;对您不起作用?

您期望的结果是什么?使用。我想要的是第2列与第1列的计数。当我输入计数时,从结构A、设备B中选择计数*A.ENTITY\u ID、B.ENTITY\u ID,其中A.structure\u NAME=B.structure\u NAME和A.XXXID;我从中得到一个错误…我是SQL新手,因此需要一些帮助你说structure.entity\u id是device.entity\u id的子字符串。但这与问题无关,因为你似乎是通过结构名称连接来获得匹配的记录。结果不是我想要的结果不是我想要的结果我通过你的查询得到的是我通过我的查询得到的总数。然后我转换到excel,然后放入数据透视表以获取result@Lemuel . . . 您应该在SQL中进行计数。当我输入计数时,我得到了它找不到的错误FROM@Lemuel . . . 这些查询在语法上似乎是正确的。它们是否在与数据库直接连接的工具中运行?这是我得到的错误ORA-00937:没有单个组函数00937。00000-不是单个组功能
SELECT s.ENTITY_ID, COUNT(*)
FROM structure s JOIN
     equipment e 
     ON b.STRUCTURE_NAME = SUBSTR(e.STRUCTURE_NAME, 1, 18)
WHERE s.XXXID in (. . .)
GROUP BY s.ENTITY_ID;