2017-02-01 4 views
0

У меня возникли проблемы с этим запросом mysql. У меня есть таблица клиентов и таблица заказов, связанная идентификатором клиента. В таблице заказов есть поле даты, и я пытаюсь перечислить имена клиентов, у которых нет заказов за определенный месяц, июль 2016 года. Мне сказали, что NOT IN может помочь, но я не уверен, как это сделать. Я искал похожие примеры, но они используют IS NULL. Я попробовал это, но это не понравилось NOT (не действующий вход на этой позиции:MYSQL соединение таблиц и выбор клиента без заказа на конкретную дату

SELECT customer.cust_name FROM customer LEFT JOIN ordertbl ON ordertbl.cust_id = customer.cust_id WHERE order_date like '2016-07%' not in ordertbl.order_date;

Затем я попытался это, но он не дал результатов:

SELECT customer.cust_name FROM customer LEFT JOIN ordertbl ON ordertbl.cust_id = customer.cust_id WHERE (SELECT COUNT(order_date like '2016-07%')) IS NULL;

Я также нашел не похожий пример, но не смог получить его, никаких результатов:

Select customer.cust_name From customer where ordertbl.cust_id Not in ( Select customer.cust_id From ordertbl Where ordertbl.order_date like '2016-07%');

Я уверен, что я все это сделаю неправильно. Я попробовал несколько других примеров, но они тоже не работали. Любая помощь приветствуется.

+0

Еще truggling? См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

ответ

0

Если предположить, что в таблице заказов, клиент ссылка ID называется CUSTOMER_ID, запрос:

SELECT CUSTOMER.CUST_NAME 
    FROM CUSTOMER 
    WHERE CUST_ID IN 
     (SELECT ORDERTBL.CUSTOMER_ID 
     FROM ORDERTBL 
     WHERE DATE <> yourdate) 
+0

Спасибо, что, похоже, сработало по назначению, но у меня вопрос о дате. Я не хочу определенную дату, но месяц, поэтому я использовал 'LIKE '2016-07' вместо' <> yourdate. Кажется, что он сработал, но на основании того, что вы использовали '<>', я бы предпочел использовать 'NOT LIKE' вместо этого. Можете ли вы объяснить, почему это не так? – user2328273

+0

Чтобы использовать оператор LIKE, вы должны преобразовать дату в текст. Но проще установить, написав: WHERE DATE> = '2017-01-01' AND DATE <= '2017-01-02' для диапазона. – Ollaw

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