2009-12-03 61 views
2

我有兩個表。一個關於屬性的信息。其他商店爲每個物業存儲3張圖片。這三幅圖像中的一幅被標記爲「主」圖像。MySQL從兩個表加入LIMIT 1

所以我必須:

Properties: 
p_id name 
1 villa a 
2 villa b 
3 villa c 
4 villa d 

Images 
i_id p_id main 
1 1  0 
2 1  0 
3 1  1 
4 2  0 
5 2  1 
6 2  0 

我需要生成查詢返回的所有屬性與他們的主圖像的ID。例如

p_id name i_id 
1  villa a 3 
2  villa b 5 

我知道這將涉及使用LIMIT 1和加入,但不知道從哪裏開始,我已經試圖通過使用子查詢這樣做,但覺得這一定比我在做什麼,不那麼複雜.. ..

*怎樣* 做它,所以它通過訂單「主」選擇查詢頂部1(即因此,如果主未設置它仍然會選擇一個圖像)?

回答

2

這裏有一種方法:

select  * 
from  properties p 
left join images i 
on   p.p_id = i.p_id 
and   i.main = 1 

如果找不到主圖像,則左連接將返回一個NULL圖像。

+0

雖然*可能*不是必需的輸出:「我需要產生一個查詢返回所有的屬性與他們的主要圖像的ID。」無論如何,誰願意購買沒有照片的房子;-p – nickf

0
select p.p_id, p.name, i.i_id 
from properties p join images i on p.p_id = i.p_id 
where i.main=1 
1

在這裏你去:

SELECT p_id, name, i_id 
FROM properties p INNER JOIN images i ON (p.p_id = i.p_id AND i.main = 1) 

SELECT p_id, name, i_id 
FROM properties p INNER JOIN images i ON (p.p_id = i.p_id) 
WHERE i.main = 1 
+0

啊 - 這只是一個屬性,而不是所有的屬性。 – Ash

+0

非常感謝。 – Ash

0

你要使用像查詢以下內容:

SELECT p.p_id, p.name, i.i_id FROM Images i INNER JOIN Properties p ON p.p_id = i.p_id WHERE i.main = 1 
1
SELECT p.p_id, p.name i.i_id FROM properties p JOIN images i USING p_id where p_id = 1;