Мне нужно выбрать список записей, но вам нужно пропустить те, которые имеют соответствующие поля в 2 разных таблицах. Вот мой DB структураmysql select from where different
заказов:
| orders_id | customers_id |
| 100 | 01 |
| 101 | 20 |
| 102 | 32 |
| 103 | 48 |
| 104 | 99 |
клиентов (только для справки):
| firstname | lastname | customers_id |
| John | Doe | 20 |
| Fred | Flinty | 22 |
| Mark | Smith | 32 |
отзывы:
| customers_id | testimonial |
| 20 | aaa |
| 32 | bbb |
| 38 | ccc |
| 49 | ddd |
| 55 | eee |
Итак, мне нужно, чтобы выбрать всех клиентов, находятся в моей таблице «Заказы», но вам нужно пропустить их, если они находятся в моей таблице «Отзывы». В приведенном выше примере мне нужно будет выбрать только клиентов 01, 48 и 99, потому что они не существуют в таблице отзывов.
Это то, что я пытался, но я явно не хватает кое-что:
SELECT c.firstname, c.lastname, c.customers_id, o.orders_id,
o.customers_id, s.date_added as status_date
FROM (orders o, testimonials t)
JOIN customers c
ON c.customers_id = o.customers_id
JOIN status_history s
ON s.orders_id = o.orders_id
and s.orders_status_id = o.orders_status
and o.customers_id != t.customer_id
order by o.orders_id ASC;
Может кто-нибудь пожалуйста, скажите мне, что я делаю неправильно и как пропустить клиентов, которые находятся в обеих таблицах (заказы и отзывы) ? Я чувствую, что нахожусь на правильном пути, потому что, если я меняю and o.customers_id != t.customer_id
на and o.customers_id = t.customer_id
, я получаю только клиентов, которые находятся в обеих таблицах (в данном случае 20 и 32).
Ответ @J W имеет более быстрый запрос. Использование 'JOIN' лучше, чем использование' IN'. –