В то время как я не ясно, по вашим точным требованиям фильтрации или заказа, я думаю, вы можете начать со следующего.
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'
Что такое 'card_expires'? свидание ? логическое? ... – Enissay
его дата, у меня есть несколько строк с разными датами, например 1 строка - 4/20, а другая - 5/18. – xTuckii