2012-05-14 39 views
0

當我加入2代表我得到一個錯誤結合2表 - 子查詢返回多個1行

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

#1242 - 子查詢返回多個1行

什麼加入這兩個大數據表的最佳方式是什麼?我想,所有的結果

+0

您沒有加入2個表格,您正在從一個表格中進行選擇,並根據另一個表格的結果對結果集進行限定。在這種情況下,USER表中有2個ID,其中年齡爲40歲。請告訴您究竟想要什麼? – beck03076

+0

@ beck03076:即OP是半連接表... –

+0

@LukasEder:是盧卡斯,半連接不是連接,是嗎?無論如何感謝修正。我不明白他的設計。他正在比較picture_id和user_id,你注意到了嗎? – beck03076

回答

5

通過IN

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

更換注=,這僅僅是「半連接」兩個表,即你只會得到的圖片作爲結果,而不是一個圖片,用戶關係。如果你確實想要做後者,那麼你就必須inner join兩個表:

select * from picture p 
join user u on p.id = u.id -- are you sure about this join condition? 
where u.age = 40 
2

嘗試使用「IN」而不是「=」

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

連接是正確的做法! –

+0

是的,但是我們沒有所有的信息來創建連接查詢IMO。上面的加入示例似乎將圖片ID與人物ID進行比較,如Lukas所說:) – bjornruysen

+0

因此,這就是您需要進行加入的內容。 –

3

在WHERE子句,當您爲id賦值時,SQL需要一個值。問題是第二個查詢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 
2

從什麼IM猜測出了什麼林眼見的,

你有一個 「圖片」 表一個「用戶」表。

  1. 表名應該是複數形式。製作「圖片」和「用戶」。
  2. 首先定義你的關係。在你的情況下,一個用戶has_many圖片和一個圖片belongs_to一個用戶(一個圖片[和平世界]不會屬於許多用戶)。
  3. 在你的圖片表中,有一個「user_id」列,並用相應的user_id填充該列。
  4. 現在,

你希望所有用戶的,其年齡正好40

你可以做一個圖片,

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

是您的要求?我有什麼意義嗎?