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

Sql 右括号缺失问题

Sql 右括号缺失问题,sql,Sql,这就是我写的问题 Select C.CUST_NAME,P.PROD_DESCRIP from Customer C JOIN (Ord O,OrderItem OT, Product P) ON (C.CUST_ID = O.CUST_ID AND O.ORD_ID = OT.ORD_ID AND OT.PROD_ID = P.PROD_ID) GROUP BY C.CUST_NAME ORDER BY OT.ORDITEM_QTY DESC 但问题是它给了我右括号缺少的问题尽管在某些数

这就是我写的问题

Select C.CUST_NAME,P.PROD_DESCRIP  from Customer C
JOIN (Ord O,OrderItem OT, Product P) ON (C.CUST_ID = O.CUST_ID AND O.ORD_ID = OT.ORD_ID AND OT.PROD_ID = P.PROD_ID) GROUP BY  C.CUST_NAME ORDER BY OT.ORDITEM_QTY DESC

但问题是它给了我右括号缺少的问题

尽管在某些数据库中允许使用连接语法,但分割连接确实要清晰得多:

Select C.CUST_NAME, P.PROD_DESCRIP 
from Customer C JOIN 
     Ord O
     on C.CUST_ID = O.CUST_ID JOIN
     OrderItem OT
     on O.ORD_ID = OT.ORD_ID JOIN
     Product P
     ON OT.PROD_ID = P.PROD_ID
GROUP BY C.CUST_NAME
ORDER BY OT.ORDITEM_QTY DESC;
顺便说一句,这可能不是你想象的那样。它返回一个客户名称和一个任意的
产品描述
。然后按任意数量对结果排序——可能来自同一行或不同行

如果要获取客户名称以及该客户的最大数量的产品,可以执行以下操作:

Select C.CUST_NAME,
       substring_index(group_concat(P.PROD_DESCRIP  order by OT.ORDITEM_QTY desc), ',', 1) as PROD_DESCRIP
from Customer C JOIN 
     Ord O
     on C.CUST_ID = O.CUST_ID JOIN
     OrderItem OT
     on O.ORD_ID = OT.ORD_ID JOIN
     Product P
     ON OT.PROD_ID = P.PROD_ID
GROUP BY C.CUST_NAME;
注意:如果
PROD\u DESCRIP
可以有逗号,则需要使用不同的分隔符

编辑:

以上是MySQL解决方案。在Oracle中,您可以执行以下操作:

select CUST_NAME, PROD_DESCRIP
from (Select C.CUST_NAME, P.PROD_DESCRIP,
             row_number() over (partition by C.CUST_NAME order by OT.ORDITEM_QTY desc) as seqnum
      from Customer C JOIN 
           Ord O
           on C.CUST_ID = O.CUST_ID JOIN
           OrderItem OT
           on O.ORD_ID = OT.ORD_ID JOIN
           Product P
           ON OT.PROD_ID = P.PROD_ID
     ) t
where seqnum = 1;

这实际上是首选的标准SQL解决方案。它可以在大多数数据库(SQL Server、Oracle、Postgres、DB2和Teradata)中使用。

尽管这种连接语法在某些数据库中是允许的,但分割连接确实要清晰得多:

Select C.CUST_NAME, P.PROD_DESCRIP 
from Customer C JOIN 
     Ord O
     on C.CUST_ID = O.CUST_ID JOIN
     OrderItem OT
     on O.ORD_ID = OT.ORD_ID JOIN
     Product P
     ON OT.PROD_ID = P.PROD_ID
GROUP BY C.CUST_NAME
ORDER BY OT.ORDITEM_QTY DESC;
顺便说一句,这可能不是你想象的那样。它返回一个客户名称和一个任意的
产品描述
。然后按任意数量对结果排序——可能来自同一行或不同行

如果要获取客户名称以及该客户的最大数量的产品,可以执行以下操作:

Select C.CUST_NAME,
       substring_index(group_concat(P.PROD_DESCRIP  order by OT.ORDITEM_QTY desc), ',', 1) as PROD_DESCRIP
from Customer C JOIN 
     Ord O
     on C.CUST_ID = O.CUST_ID JOIN
     OrderItem OT
     on O.ORD_ID = OT.ORD_ID JOIN
     Product P
     ON OT.PROD_ID = P.PROD_ID
GROUP BY C.CUST_NAME;
注意:如果
PROD\u DESCRIP
可以有逗号,则需要使用不同的分隔符

编辑:

以上是MySQL解决方案。在Oracle中,您可以执行以下操作:

select CUST_NAME, PROD_DESCRIP
from (Select C.CUST_NAME, P.PROD_DESCRIP,
             row_number() over (partition by C.CUST_NAME order by OT.ORDITEM_QTY desc) as seqnum
      from Customer C JOIN 
           Ord O
           on C.CUST_ID = O.CUST_ID JOIN
           OrderItem OT
           on O.ORD_ID = OT.ORD_ID JOIN
           Product P
           ON OT.PROD_ID = P.PROD_ID
     ) t
where seqnum = 1;

这实际上是首选的标准SQL解决方案。它可以在大多数数据库(SQL Server、Oracle、Postgres、DB2和Teradata)中使用。

如果您使用的是MySQL,则应将其标记为MySQL。如果您使用的是MySQL,则应将其标记为MySQL。我正在SQLPLus中尝试使用它,在SqlItemManager-@Gordon上使用相同的查询Linoff@TerrilThomas . . . 如果它“起作用”,那就是运气。查询返回每个客户的任意产品描述。这就是我所需要的。但SQL Plus不适用于这一点。你能告诉我这个问题吗。我也尝试过你的解决方案,但它给了我一个逐条款的问题。你能告诉我为什么它不给我一个逐条款的问题吗Expression@TerrilThomas . . . 因为当我打算删除它时,我离开了
groupby
子句。
seqnum=1
做了类似的事情。我正在SQLPLus中尝试,同样的查询在SQLItemManager-@Gordon上工作Linoff@TerrilThomas . . . 如果它“起作用”,那就是运气。查询返回每个客户的任意产品描述。这就是我所需要的。但SQL Plus不适用于这一点。你能告诉我这个问题吗。我也尝试过你的解决方案,但它给了我一个逐条款的问题。你能告诉我为什么它不给我一个逐条款的问题吗Expression@TerrilThomas . . . 因为当我打算删除它时,我离开了
groupby
子句。seqnum=1的
seqnum执行类似的操作。