2015-03-13 55 views
-2

嘗試使用以下LEFT JOIN解決,但之後在同該對於每一個國家,發現已經訪問了該國

SELECT COUNTRY FROM VISIT LEFT JOIN S ON S.CRUISENUM=VISIT.CRUISENUM (SELECT SHIP.SHIPNUM , WEIGHT , CRUISENUM FROM CRUISE LEFT JOIN SHIP ON CRUISE.SHIPNUM = SHIP.SHIPNUM) AS S 

enter image description here

+0

請改善問題的格式以增加獲得答案的機會。 – ByteHamster 2015-03-13 06:34:38

回答

0

你可以做兩個連接被困平均體重船舶查詢,不需要創建子查詢。

 SELECT V.COUNTRY, AVG(S.WEIGHT) 
     FROM visit V 
    LEFT JOIN cruise C ON (C.CRUISENUM = V.CRUISENUM) 
    LEFT JOIN ship S ON (S.SHIPNUM = C.SHIPNUM) 
    GROUP BY V.COUNTRY 
+0

謝謝,它的工作! – HODA 2015-03-13 06:48:14

+0

你好你知道我可以從我剛纔的問題刪除保持 – HODA 2015-03-13 07:03:04

+0

嘗試使用後續解決它: 不和我一起工作 從船上選擇建設者其中,max(重) (選擇船團SUM(重量)由建造者) 列出已經訪問過至少兩個不同國家的郵輪導演的名字。我想這個代碼,但它並沒有爲我工作,以及 SELECT DISTINCT C1.DIRECTOR FROM CRUISE C1,C2 CRUISE WHERE = C1.DIRECTOR AND C2.DIRECTOR C1.SHIPNUM= C2.SHIPNUM – HODA 2015-03-13 07:29:50

0

避免子查詢,除非真的需要它們。您正在通過JOIN進入正確的解決方案。總重量(但你並不需要一個左連接,因爲如果ship記錄不存在,那麼你不想來計算任何東西。)

SELECT COUNTRY, AVG(weight) 
FROM VISIT 
JOIN CRUISE USING (cruisenum) 
JOIN SHIP USING (shipnum) 
GROUP BY COUNTRY 
+0

你可以檢查下面我的其他查詢。謝謝 – HODA 2015-03-13 07:31:54

+0

即使不需要*,子查詢也可以提供巨大的性能優勢。也就是說,我同意學習做舊事物的原則,然後引​​入新的(呃)技術。 – Strawberry 2015-03-13 08:36:31

+0

@Strawberry,是的,在某些特定情況下,子查詢可以提供幫助。但是,這些都是相當專業化的,特別是對於那些最初使用SQL的人來說,一般規則應該是嘗試在不進行子查詢的情況下執行。這不是「老派」 - 除非你真的知道你在做什麼以及這些具體案例是什麼,否則這是很好的做法。 http://stackoverflow.com/questions/12365907/simple-mysql-subquery-performance – 2015-03-13 10:02:39

0

最大的建設者

select builder from ship where max(weight) in 
(select SUM(WEIGHT) from ship group by builder) 

列出已訪問過至少兩個不同國家的郵輪導演的姓名。我試過這段代碼,但它對我來說不起作用

SELECT DISTINCT C1.DIRECTOR 
FROM CRUISE C1 , CRUISE C2 
WHERE C1.DIRECTOR =C2.DIRECTOR AND C1.SHIPNUM = C2.SHIPNUM 
+0

這是我的其他問題 – HODA 2015-03-13 07:32:22

+0

問另一個問題作爲你自己問題的答案不是SO方式...... :-) – 2015-03-13 09:56:42