2016-04-24 15 views
-5

このクエリで何が問題になっていますか?SQL SELECT文 - 異なる数の列

sql error: #1222 - The used SELECT statements have a different number of columns 
SELECT `id`,`firstname`,`lastname` FROM `users` WHERE `firstname` LIKE 
'%ned%' OR `lastname` LIKE '%ned%' 
OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%' 
UNION SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id` 

ユーザーテーブル

+------------------------------------------+ 
| id | firstname | lastname | .... | 
| 1 | Nedim | Kanat | .... | 
+------------------------------------------+ 

友達テーブル

+-------------------------------------------+ 
| id | user_id | friend_id | .... | 
| 1 | 1  | 2  | .... | 
+-------------------------------------------+ 
+2

私は分かりません。何が問題ですか? –

+0

#1222 - 使用されたSELECTステートメントの列数が異なります。 –

+0

@IdontReallywolf 2番目のSELECTステートメントには1つの列しかありません。 –

答えて

1

ユニオンは、セット間の数学的演算です。 この種の操作では、2つのテーブルをCOMPATIBLEにする必要があります。つまり、数と型に同じ列を持つ必要があります。 3列のSELECT文と1列のSELECT文を結合しようとしていることははっきりしています(LEFT JOINは、結合が行われた後にSELECTプロジェクトが実行されると予想されるので、

1

あなたはこのためUNIONを使用しないでください。あなたは、クエリをこのように使用する必要があります。

  • UNIONが新しい行として追加するためのものです

    SELECT `id`,`firstname`,`lastname`, (
        SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id` 
    ) AS `UserID` FROM `users` WHERE `firstname` LIKE 
    '%ned%' OR `lastname` LIKE '%ned%' 
    OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
    OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%' 
    

    違い。

  • ,() AS Columnは、同じ行の別の列として追加するためのものです。
+0

あなたのOPで説明してください。質問。編集するオプションがあります。私たちは待つことができます。メッセージに返信してください。 –

+0

ここで私の友人になる:http://pastebin.com/ivNN8abU –

+0

友人のテーブルに「間違った」スキーマを使用しているようです。あなたは関係テーブルと6つの関係性について聞いたことがありますか? –