2014-11-18 3 views
0

Я пытаюсь вычесть результаты следующих двух SQL-запросов и не могу понять это. Я пробовал NOT IN и EXCEPT, но я думаю, что делаю это неправильно. Вот мои запросы:Вычитание результатов из двух SQL-запросов

SELECT DISTINCT first_name, last_name, rating, email, phone 
FROM users 
WHERE rating !='6'; 


SELECT DISTINCT first_name, last_name, rating, email, phone 
FROM users 
JOIN user_transactions 
ON users.id=user_transactions.user_id 
WHERE rating != '6' AND created_on >= '2014-09-01' AND created_on <= CURDATE(); 
+2

Я немного запутался, что ваши ожидаемые результаты здесь? – AdamMc331

+1

Да, непонятно, что вы подразумеваете под «вычитанием результатов»? вы пытаетесь удалить из таблицы? вы пытаетесь найти все, что соответствует первому запросу, но не второе? Таблица данных образца и образец результата, который соответствует тому, что вы хотели бы получить, были бы чрезвычайно полезны здесь. –

+0

Первый выводит большую базу данных, скажем, несколько тысяч человек. Второй - подмножество первого выхода. Я не могу напрямую запросить второй, но мне нужно сначала сравнить их и отфильтровать подмножество. Результаты будут всего лишь подмножеством первого с 5 различными столбцами. –

ответ

0

Вы можете делать то, что вы хотите с агрегацией и having пункт:

SELECT first_name, last_name, rating, email, phone 
FROM users u JOIN 
    user_transactions ut 
    ON u.id = ut.user_id 
WHERE rating <> '6'; 
GROUP BY first_name, last_name, rating, email, phone 
HAVING SUM(created_on >= '2014-09-01' AND created_on <= CURDATE()) = 0; 
+0

Это победитель! Я пытался понять это несколько дней. Большое спасибо, Гордон! –

0

кажется, что вы на самом деле пытаетесь сделать здесь получить все строки, где оценка не равна 6, а дата created_on является ДО 09/01/2014. Если я прав, то вы можете сделать это все в одном запросе:

SELECT DISTINCT first_name, last_name, rating, email, phone 
FROM users u 
JOIN user_transactions ut 
    ON u.id = ut.user_id 
WHERE rating != 6 AND created_on < '2014-09-01'; 

Я сделал это предположение, потому что вы принимаете все строки, где рейтинг не 6, и хотите, чтобы избавиться от строк, где дата created_on находится между 09/01 и сейчас. Разве это не то же самое, что выбрать все строки, в которых дата создания до 09/01?

+0

Это не дает мне результаты, которые я ищу. Я пытаюсь подмножество первого запроса. Например, первый запрос дает мне всех людей, у которых нет рейтинга 6. Второй запрос дает мне всех людей, которые имеют текущую историю. Я хочу найти людей, которые не имеют рейтинга 6 и не имеют текущей истории. –

+0

@FranciscoCervera Ну, какова ваша дата отсечения для «текущей истории»? Можно ли изменить дату в вышеуказанном запросе, чтобы дать вам то, что вы хотите? – AdamMc331

+0

Я пытался понять это и не могу найти правильное сочетание. –

Смежные вопросы