2016-08-28 7 views
0

できるだけ説明します。私の英語はあまり良くありません。2つのテーブルの値をマージするとき、オペランドの取得に1列のエラーが含まれている必要があります。

2つのテーブルの値を結合する必要があります。私は一つだけのテーブルをマージするとき、それはそうのように、正常に動作します:

SELECT `friendid`,`friendname`, (SELECT `islogged` FROM `account_data` WHERE `guildcard` = `friendid`) FROM `guild_data` WHERE `accountid` = '42000007' ORDER BY `friendid` DESC LIMIT 0, 40 

しかし、私は「account_data」テーブルから2つのエントリが必要です。

SELECT `friendid`,`friendname`, (SELECT `islogged`,`lastonline` FROM `account_data` WHERE `guildcard` = `friendid`) FROM `guild_data` WHERE `accountid` = '42000007' ORDER BY `friendid` DESC LIMIT 0, 40 
しかし、どうやら、すなわち、それは正しくない、そしてそれは私にエラーがスローされます:私は、私はこのようにそれを行うことができると思った

[Err] 1241 - Operand should contain 1 column(s) 

私は2列でこの作業を行うことができますどのように?両方の値は、から見つかったguildcard値の行から取得する必要があります。

私は十分にはっきりしています。

+0

ここで質問する方法については、次のドキュメントを参照してください。http://stackoverflow.com/help/how-to-ask –

+0

ありがとうございました。 –

答えて

0

JOINを使用する必要があるようです。これを試してみてください:LEFT OUTER JOINを使用して

SELECT g.friendid, g.friendname, a.islogged, a.lastonline 
FROM guild_data g 
LEFT OUTER JOIN account_data a 
ON g.friendid = a.guildcard 
WHERE g.accountid = '42000007' 
ORDER BY g.friendid DESC LIMIT 0, 40 

あなたはaccount_dataの行を持っていないguild_dataで結果を得ることが保証されます。 account_dataに対応する行が常にあることがわかっている場合、またはaccount_dataのいずれにもマップされていない行をguild_dataに除外する場合は、代わりにINNER JOINを使用してください。

これで目的の結果が得られない場合は、問題の原因を教えてください。このクエリで得たものと取得する予定のものを投稿してください。

+1

ありがとうございました。私はJOINの仕組みを理解していませんでしたが、今はあなたの説明のおかげでやります。このメソッドは、エラーなしで目的の結果を表示します。 –

+0

大歓迎です、私が手伝ってくれてうれしいです。 –

関連する問題