2016-11-07 9 views
0

私はという名前のテーブルを持っていて、codecountryというテーブルとというテーブルととcountryというテーブルを持っています。国番号に基づいて国名を選択

テーブルcountrycodecountryテーブルusersに基づいてテーブルcountryから選択します。

私は以下のコードはうまくいくと思っていましたが、常に空のセットを返し、私が間違っていることを理解できません。

コード:

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

問題はおそらく 'iduser =" me "'です。一致するものがなければ何も返されません。 –

+2

'' me "'は '' me''でなければなりません。二重引用符はエイリアス名です。一重引用符は文字列リテラルのためのものです。次に、閉じ括弧が欠落しています。 –

+1

JOINについてはこちらをご覧ください – Strawberry

答えて

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

と見なしました。ユーザ "me"に参加したいのであれば、なぜこの条件がjoin基準(つまり 'ON'節)? BTW:非標準の文字列区切り文字の使用を推奨すべきではありません。 –

+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)'を使うために失敗すると言っていますか? (申し訳ありませんが、コメントにbackticksを配置する方法はわかりませんが、私の意図を知っています) –

+0

申し訳ありませんが、私は何の説明も加えていませんでした。実際は予約語なので追加したばかりですが、問題は二重引用符で囲まれていると思います。 @ThorstenKettner – sagi

+0

ああ、それは良く見えます:-)私は 'code'がMySQLの予約語であることさえ知りませんでした。 –

関連する問題