Mysql 子查询只返回一个值

Mysql 子查询只返回一个值,mysql,sql,Mysql,Sql,我有这个疑问 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,但它只返回一列。为什么呢 工作台 +---

我有这个疑问

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 |
+----+
试试这个

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

基本上,我使用
internaljoin
只显示
channels
表中的id,该id在
gigs
表中至少有记录。如果您想显示列表,即使在
gigs
表上没有匹配项,您也应该使用
LEFT JOIN

同样,查询只返回一个结果,而不是10。哦,我忘了提一下,您需要删除
GROUP BY
子句,因为您没有聚合任何列。运行大约需要8秒,这有点慢。这是解释输出。你能提供你的问题的样本记录吗德苏尔。我添加了一个更简单的查询和一些示例数据,只有当我只需要
gigs.id
时,这些数据才会起作用。我需要
gigs.id
gigs.channel\u id
,这就是我使用内部选择的原因。
SELECT id, (SELECT id FROM Gigs WHERE channel_id = c.id ORDER BY id DESC LIMIT 1) As GigID

FROM channels c