Я занимаюсь разработкой приложения для лотереи, и я хочу проверить, совпадает ли любое из чисел в билетах пользователей с какими-либо нарисованными шариками, по 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, потому что отдельные запросы работают нормально. Я пытался разобраться в этом какое-то время, и я не могу этого сделать, поэтому я подумал, что спрошу профессионалов. Любой совет?