可能的双嵌套sql查询?

时间:2016-02-18 03:22:11

标签: sql postgresql nested-queries nested-query

我正在尝试创建嵌套(并且必须是嵌套的)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... 

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

只需获得这些城市所有客户的折扣,并选择具有相同折扣的所有客户。

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

向艾伯塔省大声喊道。

答案 1 :(得分: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')为我们提供了达拉斯和伦敦客户的折扣。我们只选择不同的信息。

然后,我们会询问来自达拉斯和伦敦的客户的所有记录。此外,我们只想要那些与内部查询匹配的折扣记录。