2012-12-13 40 views
0

你們請幫我改寫這個使用子查詢重寫加入作爲此查詢的子查詢

SELECT 
    S.DENUMIRE, M.DENUMIRE, AN 
FROM 
    SPECIALIZARE S 
JOIN 
    MATERII M ON S.CODSPEC = M.CODSPEC 
ORDER BY 
    S.DENUMIRE 
+0

你在做什麼需要聯合操作的本質。我認爲你應該更新你的問題,解釋你到底有什麼問題。然後我們可以幫助解決問題。 – dan1111

+0

請注意,「子查詢」僅從其中一個表創建中間結果集。但是你仍然需要加入子查詢的結果來將它與另一個表連接起來。 – dan1111

回答

1
SELECT 
    S.DENUMIRE, 
    M.DENUMIRE, 
    AN 
FROM SPECIALIZARE S 
JOIN (
    SELECT 
     DENUMIRE, 
     CODSPEC 
    FROM MATERII 
) AS M 
    ON S.CODSPEC = M.CODSPEC 
ORDER BY S.DENUMIRE 
+0

謝謝,但我沒有加入nead –

+0

你可以給我一個更多的迴應,而不使用連接 –

+3

你想要在SELECT列表中的兩列的數據。如果不加入這兩個表格,這是不可能的。 –

0

假設DENUMIRE是一個整數:

SELECT S.DENUMIRE, 1 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 1 
      ) 
UNION 
SELECT S.DENUMIRE, 2 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 2 
      ) 
UNION 
SELECT S.DENUMIRE, 3 DENUMIRE, AN 
    FROM SPECIALIZARE S 
WHERE EXISTS (
       SELECT * 
       FROM MATERII M 
       WHERE S.CODSPEC = M.CODSPEC 
         AND M.DENUMIRE = 3 
      ) 

UNION 
... 

等每一個整數價值......這當然是不可行的。

您需要加入!如果你只是想避免避免教學的原因JOIN關鍵字:

SELECT 
    S.DENUMIRE, M.DENUMIRE, AN 
FROM 
    SPECIALIZARE S, MATERII M 
WHERE 
    S.CODSPEC = M.CODSPEC 
ORDER BY 
    S.DENUMIRE 

附:儘管SQL的「兼容性枷鎖」(20世紀80年代的供應商支持這一點,併成爲標準等)允許同一個表中的兩列具有相同的名稱,但在實踐中這可能不是一個好主意。另外,我假設AN來自表SPECIALIZARE,但可能是錯字。

+0

感謝您的答案,但它仍然dosent幫助我,我嘗試了很多方式,這是種的一個分配,使不使用連接,只有子查詢我知道它的困難,因爲我沒有張貼表格。我在這個鏈接上找到了一些參考,但是它的反例和是的,你可以做到這一點,而不使用連接,但我只是不知道它http://dev.mysql.com/doc/refman/5.0/en/rewriting-subqueries。 html 2 tabels Materii with Codmaterie and An and Specializare with Denumire –

+0

爲了簡單起見,我只是想要從materi 2不同的表格中顯示denumire而不使用join或where –

+0

@CalinSinea請解釋爲什麼你有這個要求! – dan1111

0

你可能可以用一個工會和一個小組做一些愚蠢的事情。例如:

select max(s_denumire) as s_denumire, 
     max(m_denumire) as m_denumire, 
     codspec 
    from (
     select denumire as s_denumire, null as m_denumire, codspec 
      from specializare 
     union all 
     select null as s_denumire, denumire as m_denumire, codspec 
      from materii 
    ) 
    group by codspec 

這產生一行每codspec,所以它不完全像一個連接。但你可以用行號來解決這個問題。我會把它作爲你的鍛鍊,因爲這顯然是家庭作業。

0

你只是想要兩個表中的不同行嗎?

SELECT 
    SQ.DENUMIRE, SQ.AN 
FROM (
    SELECT 
     DENUMIRE, AN 
    FROM 
     SPECIALIZARE 

    UNION 

    SELECT 
     DENUMIRE, AN 
    FROM 
     MATERII 
) SQ 
ORDER BY 
    SQ.DENUMIRE 
+0

...這不會給他相同的結果集佈局,所以我懷疑這是他想要的。 –