我正在创建一个非常复杂的动态 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”对我没有帮助,因为我不是要修复上面的查询,而是将上面的内容添加到已经很复杂的查询中。