Mysql
 sql >> база данни >  >> RDS >> Mysql

WHERE стойността НЕ Е В (подзаявка)

Актуализирано: Трябва да използваме предпочитание да използваме обединения за по-добра производителност, когато това е лесно за нас. Присъединяване спрямо подзаявка

Sql Fiddle

Select distinct Customer from orders o
join 
(
  SELECT distinct Customer as changedname FROM Orders o2 
  join
  (
     Select distinct invoice from Promotions where Coupon='couponA'
  ) t3
  on o2.invoice = t3.invoice      
) t2
on o.customer != t2.changedname;

Забележка:Промених името на колона клиент за t3, защото две свързани таблици трябва да имат различни имена на колони

Обяснение:

Използването на вътрешна или подзаявка е скъпо, когато имате големи данни. вместо това използвайте съединения, нека се научим да преобразуваме подзаявка в присъединяване

С Подзаявка Имахме:

Select distinct Customer from orders where customer not in 
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));

Преобразуване на подзаявка в присъединяване

Първа стъпка:

Select distinct Customer from orders o
join 
(
  SELECT distinct Customer as changedname FROM Orders where invoice in
  (Select distinct invoice from Promotions where Coupon='couponA')
) t2
on o.customer != t2.changedname;

2-ра стъпка:

Select distinct Customer from orders o
join 
(
  SELECT distinct Customer as changedname FROM Orders o2 where invoice 
  join
  (
     Select distinct invoice from Promotions where Coupon='couponA'
  ) t3
  on o2.invoice = t3.invoice      
) t2
on o.customer != t2.changedname;

И това е всичко, много по-бързо за таблици с много редове

Оригинален отговор:

Използвайте not in . Разгледайте.

Select distinct Customer from orders where customer not in 
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));

Редактиране Добавих различен, за да направя заявката по-бърза

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Датата не се записва в Mysql от Php регистрационна форма

  2. java.sql.SQLException:Не е намерен подходящ драйвер за тест на localhost

  3. Конкатенация на низ и идентификатор на първичен ключ по време на вмъкване

  4. Пакетен файл за свързване на mysql и изпълнение на команди

  5. Как да използвам mysqldump за част от таблица?