2012-06-04 32 views
0

嘿,我不知道该怎么办呢....SQL,选择表

它的一门功课:代码和谁轿车只买了“阿根廷”国家消费者的名单。

Table sell: 
customer | resell | veicle | date | value 
---------+---------+-----------+------------+---------- 
02  | 01  | 03  | 2010-02-05 | 17500.00 
04  | 02  | 01  | 2010-01-07 | 28000.00 
01  | 03  | 08  | 2010-02-15 | 28000.00 
02  | 03  | 02  | 2010-03-12 | 42000.00 
03  | 04  | 06  | 2010-02-06 | 11500.00 
03  | 02  | 05  | 2010-01-25 | 22100.00 
01  | 01  | 04  | 2010-01-21 | 15500.00 

表客户:

cod | name | lastname 
--------+------------+------------ 
01  | Jose  | Alves 
02  | Paulo  | Cunha 
03  | Maria  | DPaula 
04  | Joana  | Silveria 

表veicle:

cod |manufacturer|  model  | year | country | price 
--------+------------+-----------------+------+-----------+---------- 
01  | 01   | Gol    | 2000 | Brasil | 25000.00 
02  | 01   | Golf   | 2005 | Argentina | 39000.00 
03  | 04   | Ford Ka   | 1990 | Brasil | 15000.00 
04  | 03   | Corsa Seda  | 1995 | Brasil | 12500.00 
05  | 04   | Fiesta   | 2003 | Argentina | 20000.00 
06  | 03   | Corsa Seda  | 1995 | Argentina | 10000.00 
07  | 05   | Palio   | 2002 | Brasil | 15000.00 
08  | 05   | Siena   | 2006 | Brasil | 26000.00 

我猜它开始:

SELECT customer.cod, customer.name 
FROM sell, customer 
WHERE (SELECT cod 
     FROM veicle 
     WHERE veicle.country = 'Argentina') = sell.veicle; 

只选择了阿根廷汽车... 请指导,我的答案。

回答

2
SELECT c.* 
FROM customer c 
WHERE EXISTS (
    SELECT 1 
    FROM sell s 
    JOIN veicle v ON v.cod = s.veicle 
    WHERE s.customer = c.cod 
    AND v.country = 'Argentina' 
    ) 
AND NOT EXISTS (
    SELECT 1 
    FROM ... 
    ); 

我会留下,其余的你,因为这是家庭作业。填写...以排除购买非阿根廷车辆的客户 - 与第一个EXISTS条款非常相似。如果你已经理解了第一个,你可以完成其余的。

+0

WOWWW我正在考虑这样的答案,但我不知道如何实现它,但你让我明白。 – mastergoo

+0

选择C * FROM 客户C WHERE EXISTS( 选择1 评级从卖出小号 JOIN veicle V ON v.cod = s.veicle WHERE s.customer = c.cod AND v.country = '阿根廷' ) AND NOT EXISTS( 选择1 评级从卖出小号 JOIN veicle v ON v.cod = s.veicle WHERE s.customer = c.cod 和v.country!='阿根廷' ); – mastergoo

+0

这是正确的? – mastergoo

0

查看表连接。通过这种方式,而不是做一个子查询(你在where语句中是什么),你可以加入表格(类似于你的From子句,但你应该指定它加入的内容),然后在你可以把veicle.country = '阿根廷'。

而FYI veicle拼写错误。它应该是车辆。

+0

我不明白..你能更spcific? – mastergoo

+0

似乎你已经得到了你的答案。只需加入车辆表,然后在'where'放置vehicle.country =“Argentina” – Kyra

1

试试这个 SELECT DISTINCT customer.cod, customer.name || customer.lastname FROM customer, veicle, sell WHERE customer.cod = sell.customer AND veicle.cod = sell.veicle AND veicle.country = 'Argentina'

+0

这是错误的。返回: – mastergoo

+0

我想现在。 – mastergoo

+0

哦,那是错误的,但回报只有1行名:maria,cod = 03.你的anwer返回了两行。名字:玛丽亚,名字:保罗。 – mastergoo

0

试试这个:

SELECT c.cod, c.name,c.last_name,v.model 
FROM sell as s JOIN customer as c JOIN veicle as v ON s.veicle = v.cod and s.customer = c.cod 
WHERE v.country = 'Argentina' 
0
WITH minima AS (
     SELECT DISTINCT s.customer 
     , MIN(v.country) AS mi 
     , MAX(v.country) AS ma 
     FROM sell s 
     JOIN veicle v ON s.resell = v.cod 
     GROUP BY s.customer 
     ) 
SELECT cu.* FROM customer cu 
JOIN minima mm ON mm.customer = cu.cod 
WHERE mm.mi = 'Argentina' 
AND mm.ma = 'Argentina' 
     ;