2012-11-07 93 views
1

table1的LEFT JOIN 2表,但只從表2返回第1記錄

cid 
itemdesc 
itemprice 

表2

cid 
imagename 
status 

我的第一個表是具有獨特的CID(不重複),我希望它LEFT JOIN TO table2但它有多個行每個cid

cid  imagename   status 
1  image1-of-cid1  test1 
1  image2-of-cid1  test2 
2  image1-of-cid2  test3 
2  image2-of-cid2  test4 
2  image3-of-cid2  test5 

但我只想要查詢返回第一行只有每個r FOM的eCord表1

感謝

回答

1

你需要創建一個額外的子查詢得到每一個cidimagename。試試這個,

SELECT a.*, b.* 
FROM table1 a 
     LEFT JOIN 
     (
      SELECT cid, MIN(imagename) minImage 
      FROM table2 
      GROUP BY cid 
     ) c ON a.cid = c.cid 
     LEFT JOIN table2 b 
      ON c.cid = b.cid AND 
       b.imageName = c.minImage 
+0

任何特別的原因,爲什麼要建立這樣一個複雜的查詢,以及爲什麼它的更好比我提供的? (我真的對你的理由感興趣,而不僅僅是拖動) – Vyktor

+0

@Vyktor,因爲在你的代碼中,你的group by子句中只包含*非聚合*列,並且沒有列被聚合到你的select子句上。這會給你無效的結果。請稍等,我會給你演示。感謝您順便問一下。 –

+0

嗯,我的解決方案[給我同樣的結果](http://sqlfiddle.com/#!2/15188/11/0)你有任何示例/源顯示它有什麼問題嗎? – Vyktor

0
Select 
    distinct a.cid,a.itemdesc,b.imagename,a.itemprice,b.status 
from table1 a, 
table2 b 
where a.cid=b.cid 
2

我同意上述吳宇森的回答。你需要某種類型的子查詢到實際檢索表的第一行2,喜歡的東西:

SELECT 
t1.[id], 
t2.* 
FROM table1 AS t1 
LEFT JOIN table2 AS t2 
    ON t2.cid = (SELECT TOP 1 cid FROM table2 WHERE cid = t1.cid) 
0

試試這個:

SELECT a.cid, a.itemdesc, a.itemprice, b.imagename, b.status 
FROM table1 a 
LEFT OUTER JOIN table2 AS b ON a.cid = b.cid 
GROUP BY a.cid, a.itemdesc, a.itemprice;