SQL UNION странная ошибка - PullRequest
       8

SQL UNION странная ошибка

1 голос
/ 27 февраля 2011

Я занимаюсь разработкой приложения для лотереи, и я хочу проверить, совпадает ли любое из чисел в билетах пользователей с какими-либо нарисованными шариками, по 2 очка за каждый матч. Пока у меня есть следующий запрос:

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 СОЮЗ ВСЕХ (ВЫБЕРИТЕ userID, firstName, 2 * COUNT (*) AS точки ОТ 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 );

Я думаю, это проблема моего UNION, потому что отдельные запросы работают нормально. Я пытался разобраться в этом какое-то время, и я не могу этого сделать, поэтому я подумал, что спрошу профессионалов. Любой совет?

1 Ответ

1 голос
/ 27 февраля 2011

Удалите скобки и псевдонимы, поскольку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...