2011-02-27 85 views
1

我正在开发一个彩票应用程序,并且我想检查用户门票上的任何数字是否与已绘制的任何球匹配,每场比赛2分。到目前为止,我有以下查询:SQL UNION奇怪的错误

SELECT firstName, SUM(points) AS totalPoints FROM (
(SELECT userID, firstName, 2 * COUNT(*) AS points 
FROM DRAWS NATURAL JOIN TICKETS NATURAL JOIN USERS 
WHERE 
    number1 = ball1 OR 
    number1 = ball2 OR 
    number1 = ball3 OR 
    number1 = ball4 
GROUP BY userID, drawID) AS N1 
UNION ALL 
(SELECT userID, firstName, 2 * COUNT(*) AS points 
FROM DRAWS NATURAL JOIN TICKETS NATURAL JOIN USERS 
WHERE 
    number2 = ball1 OR 
    number2 = ball2 OR 
    number2 = ball3 OR 
    number2 = ball4 
GROUP BY userID, drawID) AS N2 
UNION ALL 
(SELECT userID, firstName, 2 * COUNT(*) AS points 
FROM DRAWS NATURAL JOIN TICKETS NATURAL JOIN USERS 
WHERE 
    number3 = ball1 OR 
    number3 = ball2 OR 
    number3 = ball3 OR 
    number3 = ball4 
GROUP BY userID, drawID) AS N3) AS TOT 
GROUP BY userID; 

MySQL表示:文件 1064 - 你有一个错误的SQL语法;检查对应于你的MySQL服务器版本 'AS N2 UNION ALL (SELECT用户ID,名字,2 * COUNT(*)AS点 FROM DRA' 18行

使用附近的正确语法手册结构表如下:。

CREATE TABLE USERS (
userID INTEGER PRIMARY KEY, 
firstName CHAR(16), 
lastName CHAR(16), 
email CHAR(32) UNIQUE, 
phone CHAR(16), 
userName CHAR(20), 
passWord CHAR(20), 
balance INTEGER); 

CREATE TABLE TICKETS (
ticketID INTEGER PRIMARY KEY, 
userID INTEGER, 
drawID INTEGER, 
date DATE, 
number1 INTEGER, 
number2 INTEGER, 
number3 INTEGER, 
score INTEGER, 
prize INTEGER); 

CREATE TABLE DRAWS (
drawID INTEGER PRIMARY KEY, 
dateOpen DATE, 
dateClose DATE, 
gameID INTEGER, 
ball1 INTEGER, 
ball2 INTEGER, 
ball3 INTEGER, 
ball4 INTEGER, 
bonusBall INTEGER, 
dateDrawn DATE, 
profit INTEGER, 
charityID INTEGER); 

我认为它与我的工会问题,因为各个查询做工精细我一直在试图解决这了一会儿,我不能这样做,以便我以为我会问专业人士。有什么建议吗?

回答

1

删除括号&别名,因为UNION ALL,不像加入的,来自多个SELECT报表合并结果到一个结果集:

SELECT firstName, SUM(points) AS totalPoints FROM 
(SELECT userID, firstName, 2 * COUNT(*) AS points 
FROM DRAWS NATURAL JOIN TICKETS NATURAL JOIN USERS 
WHERE 
    number1 = ball1 OR 
... 
GROUP BY userID, drawID 
UNION ALL 
SELECT userID, firstName, 2 * COUNT(*) AS points 
FROM DRAWS NATURAL JOIN TICKETS NATURAL JOIN USERS 
WHERE 
    number2 
... 
) AS Tot 
+0

您好感谢它的工作就像一个魅力!我喜欢你! – Adam 2011-02-27 13:07:11