2016-02-18 3 views
0

Я пытаюсь создать запрос вложенной (и он должен быть вложенным) SQL для получения следующих результатов:Возможный двойной вложенный sql-запрос?

«Получить все клиентам, которые имеют такую ​​же скидку, что и любые клиенты в Далласе или Лондоне ».

Вот база данных с четырьмя таблицами:

DATABASE CAP 2: 
Customers 
cid  name           city   discount 
c001 Tiptop         Duluth  10.00 
c002 Basics         Dallas  12.00 
c003 Allied         Dallas   8.00 
c004 ACME           Duluth   8.00 
c005 Weyland­Yutani Acheron  0.00 
c006 ACME           Kyoto    0.00 

Orders 
ordno mon  cid   aid  pid   qty  dollars 
1011  jan  c001  a01  p01  1000   450.00 
1013  jan  c002  a03  p03  1000   880.00 
1015  jan  c003  a03  p05  1200  1104.00 
1016  jan  c006  a01  p01  1000   500.00 
1017  feb  c001  a06  p03   600   540.00 
1018  feb  c001  a03  p04   600   540.00 
1019  feb  c001  a02  p02   400   180.00 
1020  feb  c006  a03  p07   600   600.00 
1021  feb  c004  a06  p01  1000   460.00 
1022  mar  c001  a05  p06   400   720.00 
1023  mar  c001  a04  p05   500   450.00 
1024  mar  c006  a06  p01   800   400.00 
1025  apr  c001  a05  p07   800   720.00 
1026  may  c002  a05  p03   800   740.00 

Agents 
aid  name   city     percent 
a01  Smith  New York     6 
a02  Jones  Newark       6 
a03  Brown  Tokyo        7 
a04  Gray   New York     6 
a05  Otasi  Duluth       5 
a06  Smith  Dallas       5 
a08  Bond   London       7 

Products 
pid  name   city   quantity priceUSD 
p01  comb   Dallas  111400   0.50 
p02  brush  Newark  203000   0.50 
p03  razor  Duluth  150600   1.00 
p04  pen    Duluth  125300   1.00 
p05  pencil Dallas  221400   1.00 
p06  folder Dallas  123100   2.00 
p07  case   Newark  100500   1.00 
p08  clip   Newark  200600   1.25 

Что у меня возникают проблемы с, в настоящее время в состоянии захватить клиентов, которые имеют равные скидки, но как я могу это сделать? Любая помощь будет оценена по достоинству.

Это то, что я до сих пор:

SELECT name FROM customers WHERE cid in (
    SELECT cid from customers where discounts in... 

Любая помощь будет оценена.

+0

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

+0

Извините, все еще новый. Я отредактирую сообщение с информацией в вопросе – motoko96

+0

Возможно, некоторые примеры данных и желаемый результат помогут? Я * думаю * Я знаю, что вы спрашиваете, но я делаю предположения, которые не ясны в вашем вопросе. Данные говорят громче слов в разы – Hambone

ответ

1

Просто добавьте некоторые пояснения, основанные на моих комментариях.

Используйте запрос следующим образом:

select * 
from customers 
where discount in (
    select DISTINCT discount 
    from customers 
    where city in ('Dallas', 'London') 
) 
and city not in ('Dallas', 'London'); 

Пример: http://sqlfiddle.com/#!9/055d7/4

Давайте разберем это вниз (Примечание: я добавил скидка). Внутренний запрос select DISTINCT discount from customers where city in ('Dallas', 'London') дает нам скидки клиентам из Далласа и Лондона. Мы просто выбираем отличную информацию.

Затем мы запрашиваем все записи от клиентов, которые не находятся в Далласе и Лондоне. Кроме того, нам просто нужны те записи, где скидки соответствуют внутреннему запросу.

1

Просто получите скидки от всех клиентов в этих городах и выберите всех клиентов с одинаковой скидкой.

SELECT * 
FROM Customers 
WHERE discount in (SELECT discount FROM Customers WHERE city in ("Edmonton", "Calgary")); 

Крик в Альберту.

+0

Строковые значения должны быть заключены в одинарные кавычки в SQL, двойные кавычки предназначены для имен столбцов и таблиц. '' Edmonton ''ссылается на столбец, а не на константу. Вам нужно использовать «Эдмонтон» –

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