SELECT * ,
(SELECT ZoneName
FROM zone_message_master
WHERE ZoneID = zoneid) 'ZoneName'
FROM zone_master
WHERE ZoneID=zoneid;
これはストアド プロシージャで実行されているクエリであり、エラーが発生しています
サブクエリが複数の行を返す
ここで私が間違ったことを誰か教えてもらえますか?
私がここで間違ったことは何ですか?
あなたが得たエラーはかなり明白です。サブクエリは正確に1行を返す必要があります。を使用して、行数を制限できますORDER BY ... LIMIT 1
。
どうすれば修正できますか?
そのためのサブクエリは必要ありませんでしたJOIN
。代わりに、2つのテーブルを直接使用します。
SELECT z.ZoneId, zm.ZoneName
FROM zone_message_master zm
INNER JOIN zone_master z ON zm.ZoneId = z.ZoneId
That means you have more than one entry in zone_message_master
for your zoneid
.
This query will be more correct:
SELECT zm.* , zmm.ZoneName
FROM zone_master zm
JOIN zone_message_master zmm ON zm.ZoneID=zmm.ZoneID
WHERE zm.ZoneID=zoneid;
問題はおそらく、表示されたエラー メッセージと同じくらい明確です。サブクエリをだまして 1 行だけを返すようにすることはできますが、そうではありません。私が見ているように、あなたの意図は、テーブルzone_message_master
が一意のZoneID
値を持つべきだということです。正しくするには、列に一意のインデックスを作成する必要がありzone_message_master.ZoneID
ます。もちろん、これにはそのテーブルのクリーニングが必要ですが、最終的には正しく動作することを確認できます。