2016-11-07 302 views
0

我有一個名爲users的表,它有一列codecountry和另一個表country,它具有列codecountry根據國家/地區代碼選擇國家/地區

我想根據表users中的codecountry從表country中選擇country

我以爲下面的代碼可以工作,但它總是返回一個空集,我無法弄清楚我做錯了什麼。

代碼:

SELECT country 
FROM country 
WHERE (code) IN (
    SELECT codecountry 
    FROM users 
    WHERE iduser="me" 
) 
+2

問題可能是'iduser =「me」'。如果沒有任何匹配,您將不會返回任何內容。 –

+2

「我」應該是「我」。雙引號用於別名;單引號用於字符串文字。然後有一個右括號丟失。 –

+1

現在查看約JOINs – Strawberry

回答

0
SELECT c.country 
    FROM country c 
    JOIN users u 
    ON u.codecountry = c.code 
WHERE u.iduser = "me"; 
+0

如果你想加入用戶「我」,那麼爲什麼這個條件不是連接標準的一部分(即'ON'條款)?順便說一句:不應該鼓勵使用非標準的字符串分隔符。 –

+0

@ThorstenKettner是的。這也沒關係 - 甚至更好。填滿你的靴子。 – Strawberry

+0

@ThorstenKettner:但是將'u.codecountry = c.code'移到'WHERE'子句,你會被告知掉:) – onedaywhen

2

我相信問題與"me",字符串應該用單引號包裹,也嘗試使用反引號保留字(這通常會引發錯誤):

SELECT country 
FROM country 
WHERE`code IN (SELECT codecountry 
       FROM `users` 
       WHERE iduser='me') 

要麼是這樣,要麼就像@GordonLinoff在評論中說的那樣,在users表中可能沒有任何記錄匹配這個條件。

+0

這不是一個真正的答案。你是說例如OP的查詢失敗,因爲他們使用'(code)'而不是''code''? (對不起,我不知道如何將反引號置於評論中,但你知道我的意思。) –

+0

對不起,有一件事要做,所以我沒有添加任何解釋。其實我只是添加它,因爲它是一個保留字,但我認爲問題在於雙引號。 @ThorstenKettner – sagi

+0

啊,看起來更好:-)我甚至都不知道'code'是MySQL中的保留字。 –

相關問題