Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Java SQL:如何进行查询,检查列上具有特定值的行是否多次引用外键?_Java_Sql_Sql Server_Foreign Keys - Fatal编程技术网

Java SQL:如何进行查询,检查列上具有特定值的行是否多次引用外键?

Java SQL:如何进行查询,检查列上具有特定值的行是否多次引用外键?,java,sql,sql-server,foreign-keys,Java,Sql,Sql Server,Foreign Keys,我正在处理的数据库有表服务和订单 每个服务都有一个外键引用作为列fk_顺序 现在,服务有一个类型列。无论何时在web应用程序中创建新的订单,他们都会自动获得服务,其类型为'ORDERHANDLE' 在某个点上出现了一个bug,可能造成了这样一种情况:一些订单最终会有多个服务,其中类型

我正在处理的数据库有表
服务
订单

每个
服务
都有一个外键引用作为列
fk_顺序

现在,服务有一个
类型
列。无论何时在web应用程序中创建新的
订单
,他们都会自动获得
服务
,其
类型为
'ORDERHANDLE'

在某个点上出现了一个bug,可能造成了这样一种情况:一些
订单
最终会有多个
服务
,其中
类型
引用它们

我现在要做的是做一个查询,检查是否有多个(不止一个)类型为
'ORDERHANDLE'
服务行引用一个
fk\u订单
。因为
服务
中只有一个
订单句柄
类型
应该引用一个
订单

谢谢你的建议

这是我到目前为止的疑问(是的,我是个笨蛋。)

我只是不知道如何从那里开始。

您需要执行
服务
表的一部分。您需要使用
COUNT
函数来计算
ORDERHANDLE
发生次数。我对sql server不太精通,但类似的方法应该可以:

SELECT count(services.id) FROM orders
INNER JOIN services
ON services.fk_order = order.id
WHERE services.type = 'ORDERHANDLE'
GROUP BY orders.id
HAVING count(services.id) > 1

您可以标识具有多个外键引用的行,如下所示:

SELECT orders.id, count(*) cnt
FROM services
INNER JOIN orders
ON services.fk_order = order.id
WHERE services.type = 'ORDERHANDLE'
GROUP BY orders.id
HAVING count(*) > 1

你能提出你的问题吗?您看到的是一个简单的
JOIN
,带有
COUNT
子句。谢谢你的评论。到目前为止,我的查询只是通过使用COUNT和关键字来选择我应该开始缩小范围的组。谢谢你指出这些。我正在研究如何使用它们。谢谢你,我做到了。我想我知道了如何使用这些关键字(计数、分组、拥有)。我现在必须和他们一起玩了。我想你可能想看看一本关于SQL聚合的不错的教程。从长远来看,这会对你有帮助的。我也这么认为。
SELECT orders.id, count(*) cnt
FROM services
INNER JOIN orders
ON services.fk_order = order.id
WHERE services.type = 'ORDERHANDLE'
GROUP BY orders.id
HAVING count(*) > 1