MySQL查询聚合MAX和子查询

标签 mysql sql

有没有办法从 select 内部的子查询中获取值?

stop_link表

id | duid | domain_id 
1  | 1    | 1
2  | 2    | 1
3  | 1    | 2
4  | 2    | 2
5  | 3    | 1

我想要的结果(假设domain_id = 2)

duid    | domain_id 
3       | 2

查询(不起作用):

INSERT INTO stop_link (
              duid,

              domain_id) 
SELECT
  IFNULL(MAX(sl.duid), 0) + 1 AS duid,
  sl.domain_id 
FROM
  stop_link sl
WHERE sl.domain_id = (SELECT sd.id FROM stop_domain sd LIMIT 1)

查询有效,但我希望避免设置变量:

SET @domain_id = (SELECT sd.id FROM stop_domain sd LIMIT 1);
SELECT
  IFNULL(MAX(sl.duid), 0) + 1 AS duid
  , @domain_id
FROM
  stop_link sl
WHERE sl.domain_id = @domain_id;

最佳答案

你的意思是这样的吗:

/*Your example Table*/

DECLARE @T  
TABLE(ID INT,duid INT,domain_id INT)

INSERT INTO @T
VALUES
(1 , 1    , 1 ),
(2  , 2    , 1),
(3  , 1    , 2),
(4  , 2    , 2),
(5  , 3    , 1)

--The query
SELECT domain_id,Isnull(max(duid),0)+1 [newId]
FROM @T
GROUP BY domain_id

关于MySQL查询聚合MAX和子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43095544/

相关文章:

mysql - SQL - 将行插入到同一个表中,其中列具有不同的值

PHP + MySql Cron Job,删除超过 1 小时的行

php - 如何在从 PHP 从数据库中检索数据时将 2 个单元格加入表中?

mysql - 使用单个查询转换输出数字格式

Java 准备好的语句不起作用?

mysql - 连接 ODK 聚合和 MySQL 服务器

mysql - 如何获取每个用户最新的loginevent记录?

java - 无法在java中连接到mysql

php - 如何将表中所有字符串的 Æ 替换为 AE?

sql - 如果没有 JOIN,那么在文档数据库中处理数据的正确方法是什么?