SELECT * FROM T_BUSINESS_VIRTUAL_LOCATION WHERE F_TRAY_CODE = (SELECT TOP 1 F_TRAY_CODE FROM T_BUSINESS_STOCK_BILL WHERE F_IS_VIRTUAL = '1' ORDER BY MAKE_TIME ASC) 用queryWrapper().lambda().select改造 sqlserver数据库
时间: 2023-08-05 07:03:00 浏览: 102
可以使用下面的代码来实现上述SQL查询:
```
queryWrapper().lambda().select(VirtualLocation::getId, VirtualLocation::getName)
.eq(VirtualLocation::getTrayCode,
Wrappers.<VirtualLocation>lambdaQuery()
.select(StockBill::getTrayCode)
.eq(StockBill::getIsVirtual, "1")
.orderByAsc(StockBill::getMakeTime)
.last("FETCH FIRST 1 ROWS ONLY")
);
```
在这里,我们使用了queryWrapper().lambda().select方法来指定需要查询的字段,使用eq方法来实现WHERE条件的指定。
在子查询中,我们使用了Wrappers.<VirtualLocation>lambdaQuery()方法来创建一个子查询,用于查询满足条件的第一个可用的托盘编码。子查询中只是用了StockBill::getIsVirtual等实体类字段的引用来指定查询条件,使用orderByAsc方法来指定按照创建时间升序排序,并使用last方法来指定只返回第一条记录。最后,我们使用了FETCH FIRST 1 ROWS ONLY来实现只返回第一条记录的功能。
最终生成的SQL语句类似于:
```
SELECT id, name FROM T_BUSINESS_VIRTUAL_LOCATION WHERE F_TRAY_CODE = (
SELECT F_TRAY_CODE FROM T_BUSINESS_STOCK_BILL WHERE F_IS_VIRTUAL = '1' ORDER BY MAKE_TIME ASC FETCH FIRST 1 ROWS ONLY
)
```
阅读全文