2017-04-15 30 views
0

我提到的鏈接 - >MySQL - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery有什麼辦法讓代碼更有效率?..不能直接使用IN COZ版本的MySQL還不支持'LIMIT&IN/ALL/ANY/SOME子查詢

我有一個老師,有一個代碼和MAC地址連接到路由器..學生必須從相同的MAC地址輸入相同的代碼..我想要一個學生誰做了它的名單...我只想查看老師

感謝所有幫助:)

我的代碼(這是工作)最後上傳的代碼 - >

SELECT s.s_id 
FROM students s 
WHERE s.mac IN 
    (SELECT * 
    FROM 
     (SELECT t.mac 
     FROM teacher t 
     ORDER BY t.sno DESC 
     LIMIT 1)temp_tab) 
    AND s.code IN 
    (SELECT * 
    FROM 
     (SELECT t.code 
     FROM teacher t 
     ORDER BY t.sno DESC 
     LIMIT 1)temp_tab); 
+1

究竟是你想做些什麼?一個例子會非常有幫助。 –

+0

我有一位老師上傳一個代碼和MAC地址附加到路由器..學生必須從相同的MAC地址輸入相同的代碼..我想要一個學生誰做過的名單...我想只檢查教師上傳的最後一個代碼 – Mihirp

回答

3

使用連接應該更有效率,但是再次,這取決於您試圖實現的目標。

SELECT s.s_id 
FROM students s 
JOIN (
    SELECT t.mac, t.code 
    FROM teacher t 
    ORDER BY t.sno DESC 
    LIMIT 1 
) t ON s.mac = t.mac AND s.code = t.code 

索引匹配或排序列也會增加性能。

+0

我有一位老師上傳代碼和連接到路由器的mac地址..學生必須從相同的mac地址輸入相同的代碼..我想要一個學生列表誰已經完成了...我想只檢查老師上傳的最後一個代碼 – Mihirp

0

您可以使用limit 1=

SELECT s.s_id 
FROM students s 
WHERE s.mac = (SELECT t.mac 
       FROM teacher t 
       ORDER BY t.sno DESC 
       LIMIT 1 
      ) AND 
    s.code = (SELECT t.code 
       FROM teacher t 
       ORDER BY t.sno DESC 
       LIMIT 1 
      ); 

但是,此代碼可能不是你想要的。如果t.sno沒有關係,那就好了。但如果他們是兩個領域可能不是來自同一行。所以,做一個子查詢:

SELECT s.s_id 
FROM students s 
WHERE (s.mac, s.code) = (SELECT t.mac, t.code 
         FROM teacher t 
         ORDER BY t.sno DESC 
         LIMIT 1 
         ); 

你可以,當然,轉成JOIN這是Viliam建議。

0

,而不是選擇s.s_id它應該是* 感謝戈登和Villiam

SELECT * FROM 學生小號 JOIN( SELECT t.mac,t.code 從以教師牛逼 ORDER BY t.sno DESC LIMIT 1 )t ON s.mac = t.mac AND s.code = t.code

0

爲什麼大家都認爲他們必須在單個查詢中運行每個SQL任務?

這裏有一個更簡單的解決方案:

SELECT t.mac, t.code 
FROM teacher t 
ORDER BY t.sno DESC 
LIMIT 1 
INTO @mac, @code; 

SELECT s.s_id 
FROM students s 
WHERE s.mac = @mac AND s.code = @code; 
相關問題