2012-10-21 174 views
1

我有這個查詢。子查詢只返回一個值

SELECT 
    d.gid, d.channel_id 
FROM channels, (
    SELECT 
     gigs.id as gid, gigs.channel_id 
    FROM gigs 
    ORDER BY gigs.id DESC 
    LIMIT 1 
) as d 
WHERE d.channel_id = channels.id 
LIMIT 10 

我希望得到每個channels.id一個gid,而是它只返回一列。這是爲什麼?

演出表

+---------+------------+ 
| id  | channel_id | 
+---------+------------+ 
| 150661 | 6   | 
| 745797 | 6   | 
| 483996 | 6   | 
| 3407209 | 6   | 
| 1175022 | 5   | 
| 3238459 | 6   | 
| 711413 | 5   | 
| 524758 | 5   | 
| 154764 | 5   | 
| 1594779 | 5   | 
| 1659091 | 2   | 
| 1086768 | 6   | 
| 1161320 | 8   | 
| 467394 | 5   | 
| 2877040 | 8   | 
| 2705821 | 6   | 
| 1881747 | 5   | 
| 901902 | 1   | 
| 143322 | 6   | 
| 671658 | 1   | 
+---------+------------+ 

頻道表

+----+ 
| id | 
+----+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
| 10 | 
+----+ 
+0

你能提供你問題的樣本記錄嗎? :D –

+0

當然。我添加了一個更簡單的查詢和一些示例數據 – Oleander

+0

查看我更新的答案。 –

回答

2

試試這個,

SELECT a.id, b.max_ID 
FROM channels a 
     INNER JOIN 
     (
      SELECT channel_ID, MAX(id) max_ID 
      FROM gigs 
      GROUP BY channel_ID 
     ) b ON a.id = b.channel_ID 

SQLFiddle Demo

基本上,我以前INNER JOIN來僅顯示來自channels的表格,該表格在gigs表格上至少有記錄。如果你想顯示列表,即使沒有gigs表中的匹配,那麼你應該使用LEFT JOIN來代替。

+0

同樣的事情,查詢只返回一個結果,而不是10. – Oleander

+0

哦,我忘了提及,因爲你沒有聚合任何列,所以你需要刪除'GROUP BY'子句。 –

+0

和以前一樣:) – Oleander

-2
SELECT id, (SELECT id FROM Gigs WHERE channel_id = c.id ORDER BY id DESC LIMIT 1) As GigID 

FROM channels c 
+0

這隻會工作,如果我只想'gigs.id'。我需要'gigs.id'和'gigs.channel_id',這就是我使用內部選擇的原因。 – Oleander