2015-05-30 29 views
-2
CARS(CCODE,ADDRESS,CITY,COLOR) 
CARS_CONTRACT(CON_CODE,ST_dATE,END_dATE,PNAME,MONTHLYPRICE,CCODE) 

發現CCODE和地址與城市=「新約克」的這montlyprice已經馬麗娟超過500 EVRO以及其中超過7個合同已簽訂,所以我代碼是都不在了,在和「=」操作符SQL

我的代碼..

select ccode,address 
from cars c,cars_contract cd 
where c.ccode=cd.ccode and city='new-york' 
and ccode not in(select ccode from cars_contract where monthlyprice<500 
group by ccode,address 
having count(*)>7 

我的問題是我可以用

替換上面的代碼3210
select ccode,address 
from cars c,cars_contract cd 
where c.ccode=cd.ccode and city='new-york' 
and monthlyprice>500 
group by ccode,address 
having count(*)>7 

還是這個? (具體我一定要指定內部條款加入條件?)

select ccode,address 
from cars c,cars_contract cd 
where c.ccode=cd.ccode and city='new-york' 
and ccode in(select ccode from cars_contract where monthlyprice>500) 
group by ccode,address 
having count(*)>7 
+1

MySQL或Oracle? –

+1

避免不建議使用的語法,使用明確的'JOIN'和'ON'。除此之外,它取決於您是否希望將篩選應用於子查詢。 –

+0

問題不明確。你能提供樣本輸入和輸出嗎?另外,如已經問過的,請指出這是MySQL還是Oracle。 –

回答

0

你不需要額外的子查詢 - 只使用ANSI加入,而不是隱含的完全限定的所有列,以確保CCODE使用不含糊,即:

SELECT c.ccode, c.address 
FROM cars c 
    INNER JOIN cars_contract cd ON c.ccode = cd.ccode 
WHERE c.city = 'new-york' 
AND cd.monthlyprice > 500 
GROUP BY c.ccode, c.address 
HAVING COUNT(*) > 7; 
+0

這是一個很好的結果,我完全錯過了DISTINCT不會對GROUP BY產生任何影響。感謝提醒:) –