2

我尝试对一些重复项做一个简单的选择,但我的 sql 语句总是以这个错误结束:

命令未正确结束

我有一张这样的桌子

EAN              STR
=============    ====
8030524096397    AAAA
8030524096397    BBBB
8030524096731    XXXX
8030524096731    YYYY
8030524096324    CCCC

我的选择其实很简单

SELECT EAN, COUNT(*) FROM ean GROUP BY ean HAVING COUNT(*) > 1;

结果:

EAN               COUNT(*)
=============     ========
8030524096397        2
8030524096731        2

一切都很好,直到这里!现在我想要STR重复的并试试这个

SELECT * FROM EAN E 
    INNER JOIN ( SELECT EAN, COUNT(*) FROM ean GROUP BY ean HAVING COUNT(*) > 1 )  
R ON 
E.EAN = R.EAN;

但这会导致此错误。

它正是这样说的:

SELECT * FROM EAN E
INNER JOIN ( SELECT EAN, COUNT(*) FROM ean GROUP BY ean HAVING COUNT(*) > 1 )  R ON
^
Error: Command not properly ended

我究竟做错了什么?

给 DB 的信息: Gupta Centura SQLBase 7.0.1

4

3 回答 3

3

我不认为 SQLBase 7.01 支持正确的 ANSIJOIN语法(除此之外:使用更现代的产品是多么好的理由)。该错误表明INNER JOIN.

这里有两种可能的解决方案。

首先,令人讨厌的古老join语法:

SELECT *
FROM EAN E,
     ( SELECT EAN, COUNT(*) as cnt FROM ean GROUP BY ean HAVING COUNT(*) > 1 )  
R 
WHERE E.EAN = R.EAN;

二、IN

SELECT *
FROM EAN E
WHERE E.EAN IN ( SELECT EAN FROM ean GROUP BY ean HAVING COUNT(*) > 1 )  
于 2015-11-02T11:57:23.740 回答
0

试试这个(用AS关键字为表添加别名)

SELECT * FROM EAN AS E 
INNER JOIN 
(SELECT EAN, COUNT(*) FROM ean GROUP BY ean HAVING COUNT(*) > 1) AS R 
ON 
E.EAN = R.EAN;
于 2015-11-02T11:44:25.323 回答
0
SELECT * 
FROM EAN E 
INNER JOIN 
    (SELECT EA.EAN, COUNT(*) Cnt 
    FROM ean EA
    GROUP BY EA.ean 
    HAVING COUNT(*) > 1 
    ) R ON E.EAN = R.EAN;

我给 COUNT(*) 起了一个别名 Cnt。这应该使错误消失。

于 2015-11-02T11:39:49.507 回答