2016-03-13 8 views
0

Im пытается написать инструкцию SELECT с подзапросом, который определяет customer_id и last_name клиента , чья кредитная карта истекает быстрее, как показано в моей таблице заказов , и для этого я хочу использовать предложение WHERE, но я застрял, так как результат отображает только одного клиента ... вот что я до сих пор. если кто-то может вести меня в правильном пути ..Объединение двух таблиц с использованием подзапроса в mysql

SELECT customer_id, last_name 
FROM customers 
WHERE NOT EXISTS 
(SELECT card_expires 
FROM orders 
WHERE customers.customer_id = orders.customer_id 
); 
+0

Что такое 'card_expires'? свидание ? логическое? ... – Enissay

+0

его дата, у меня есть несколько строк с разными датами, например 1 строка - 4/20, а другая - 5/18. – xTuckii

ответ

1

В то время как я не ясно, по вашим точным требованиям фильтрации или заказа, я думаю, вы можете начать со следующего.

SELECT customer_id, last_name, card_expires 
FROM customers 
    left join ( 
     SELECT card_expires 
     FROM orders 
) o on (customers.customer_id = orders.customer_id) 

Используя этот метод, вы можете увидеть полный список всех клиентов и card_expires, а затем вы можете начать, чтобы отфильтровать список вниз, что вы хотите. Вы можете создать подзапрос по заказам, чтобы выбрать конкретное подмножество заказов. Опять же я не совсем понимаю, что вы пытаетесь сделать точно. Но, сначала выбирая всю информацию, вы сможете увидеть всю информацию и сможете решить, что отфильтровать.

Вы также можете решить, что вы также хотели бы видеть больше столбцов в таблице заказов, чтобы помочь вам решить, какие заказы включать/исключать.

Если вы хотите только увидеть список клиентов, которые не имеют записи card_expires

SELECT customer_id, last_name, card_expires 
    FROM customers 
     left join ( 
      SELECT card_expires 
      FROM orders 
    ) o on (customers.customer_id = orders.customer_id) 
    where o.card_expires is null 

Если вы хотите видеть только клиент без карты, которые истекают в будущем.

 SELECT customer_id, last_name, card_expires 
     FROM customers 
      left join ( 
       SELECT card_expires 
       FROM orders 
       where card_expires > now() 
     ) o on (customers.customer_id = orders.customer_id) 
     where o.card_expires is null 

При разработке SQL-оператор, то, что может сделать это легче сделать, сначала создать оператор SQL, который возвращает все столбцы вы будете использовать, чтобы отфильтровать список по, а затем применить фильтр. Это позволит вам легко добавлять и удалять критерии до тех пор, пока они не будут исправлены.

Мне нравится разбивать каждый критерий на свою отдельную строку, чтобы я мог легко прокомментировать строки с двумя тире. EX:

SELECT customer_id, last_name, card_expires 
    FROM customers 
     left join ( 
      SELECT card_expires 
      FROM orders 
      where card_expires > now() 
    ) o on (customers.customer_id = orders.customer_id) 
    where 0=0 
     and o.card_expires is null 
     -- and last_name = 'Smith' 
0

Используйте LEFT JOIN/INNER JOIN, я предполагаю, что вы хотите ORDER BY ASC, так как вы хотите скорейшего

SELECT customer_id, last_name 
FROM customers c 
LEFT JOIN orders o ON o.customer_id = c.customer_id 
ORDER BY card_expires ASC; 
+0

Я пытаюсь использовать предложение WHERE, любая помощь на этом будет замечательной. – xTuckii

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

  • Нет связанных вопросов^_^