0

2 つのテーブルを結合すると、エラーが発生します

select * from picture where id=(SELECT id FROM user where age= 40 ) 

#1242 - サブクエリが複数の行を返す

これら 2 つの大きなデータ テーブルを結合する最良の方法は何ですか? 全ての結果を出したい

4

4 に答える 4

5

=で置き換えますIN

select * from picture where id in (select id from user where age = 40) 

これは 2 つのテーブルの「半結合」にすぎないことに注意してください。つまり、画像とユーザーの関係ではなく、画像のみが結果として得られます。実際に後者を実行しようとしている場合は、次inner joinの 2 つのテーブルが必要になります。

select * from picture p
join user u on p.id = u.id -- are you sure about this join condition?
where u.age = 40
于 2012-05-14T13:56:55.340 に答える
3

where 句で に値を代入するとid、SQL は単一の値を期待します。問題は、2 番目のクエリSELECT id FROM user where age= 40が複数の行を返すことです。

あなたができることは

select * 
from picture 
where id in
    (select id from user where age = 40) 

また

select *
from picture p, user u
where p.id = u.id
and u.age = 40
于 2012-05-14T13:58:15.187 に答える
2

「=」の代わりに「IN」を使用してみてください

select * from picture where id IN (SELECT id FROM user where age= 40 )  
于 2012-05-14T13:57:33.247 に答える
2

私が見ているものから私が推測していることから、

「picture」テーブルと「user」テーブルがあります。

  1. テーブル名は複数形にする必要があります。「写真」と「ユーザー」にします。
  2. 最初に関係を定義します。あなたの場合、1 人のユーザーには多くの写真があり、1 枚の写真は 1 人のユーザーに属します ([平和な世界の] 1 枚の写真は多くのユーザーに属しません)。
  3. pictures テーブルに "user_id" 列があり、その列に適切な user_id を入力します。
  4. 今、

ちょうど 40 歳のユーザーのすべての写真が必要です。

あなたは、

SELECT *   
FROM pictures 
WHERE user_id IN (SELECT user_id 
                  FROM users 
                  WHERE user_age = 40)

それはあなたの要件でしたか。私は何か意味がありますか?

于 2012-05-14T14:15:07.220 に答える