sql - 需要在只返回一行的外连接中创建一个表达式

标签 sql correlated-subquery

我正在创建一个非常复杂的动态 sql,它必须为每个用户返回一行,但现在我必须加入一个一对多的表。我进行了外连接以确保至少返回一行(并且可以检查 null 以查看该表中是否有数据)但我必须确保如果有多个,我必须确保仅从该外连接部分返回一行此用户的第二个表中的行。
到目前为止,我已经想出了这个:(sybase)

SELECT a.user_id
FROM table1 a
    ,table2 b
WHERE a.user_id = b.user_id
AND a.sub_id = (
    SELECT min(c.sub_id)
    FROM table2 c
    WHERE b.sub_id = c.sub_id
    )

子查询在一对多表中为该特定用户查找最小值。

这有效,但我担心当表 1 和表 2 变得非常大时,执行相关子查询会带来麻烦。
有没有更好的办法?我正在努力想出一种方法来实现它,但我没有看到它。
还说“where rowcount=1”或“top 1”对我没有帮助,因为我不是要修复上述查询,而是将上述内容添加到已经很复杂的查询中。

最佳答案

在 MySql 中,您可以使用以下方法确保任何查询最多返回 X 行

select *
from foo
where bar = 1
limit X;

不幸的是,我相当确定这是一个特定于 MySQL 的 SQL 扩展。但是,在 Google 上搜索“mysql sybase limit”之类的内容可能会找到 Sybase 的等价物。

关于sql - 需要在只返回一行的外连接中创建一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239945/

相关文章:

SQL Server 2012 数据透视表

mysql - NOT EXISTS 条件下的查询速度问题

sql - 具有相关子查询的 MySql 范围问题

sql - 使用单个 SQL 关联子查询获取两列

mysql - 左连接 3 个表错误 #1066

sql - Teradata SQL 性能调整 : STRTOK_SPLIT_TO_TABLE: EXPLAIN Failed. 3738:字符串长度超过 31000 个字符

sql - Oracle SQL 创建函数 - 混淆编译错误

mysql - 获取查询中先前记录的总和并添加或减去以下结果

sql - 多层相关子查询

mysql - 子查询对项目进行计数,然后按主查询的字段对它们进行分组,不重复