问一个where 1 =1 的问题 ,

[复制链接]
查看11 | 回复5 | 2021-1-23 14:14:07 | 显示全部楼层 |阅读模式
刚看到Where 1 =1 这个语句。说是为了动态SQL 方便使用的。 但是下面的语句,没有使用动态SQL,还有必要使用Where 1 =1 语句吗 ?
另外在这个帖子中(http://www.itpub.net/forum.php?m ... 6672&highlight=)4楼,看大师说,
如果里层有排序,必须先过一遍才能选中第一个。

这个SQL中Where 1= 1 有必要吗 ?里面就有排序 。 pub讨论下,
快下班了。明天我也试验下。
WHERE1 = 1

ANDAIA.INVOICE_ID = AIL.INVOICE_ID

ANDAIL.RCV_SHIPMENT_LINE_ID = RSL.SHIPMENT_LINE_ID

ANDRSH.SHIPMENT_HEADER_ID = RCT.SHIPMENT_HEADER_ID

ANDRSL.SHIPMENT_LINE_ID = RCT.SHIPMENT_LINE_ID

ANDRSH.SHIPMENT_HEADER_ID = RSL.SHIPMENT_HEADER_ID

ANDPOH.PO_HEADER_ID = RSL.PO_HEADER_ID

ANDPOL.PO_LINE_ID = RSL.PO_LINE_ID

ANDPR.PO_RELEASE_ID(+) = RSL.PO_RELEASE_ID

ANDPOLL.LINE_LOCATION_ID = RSL.PO_LINE_LOCATION_ID

ANDPOH.VENDOR_ID = PV.VENDOR_ID(+)

ANDPOH.VENDOR_SITE_ID = PVS.VENDOR_SITE_ID(+)

ANDPOL.ITEM_ID = MSI.INVENTORY_ITEM_ID

ANDRSL.TO_ORGANIZATION_ID = MSI.ORGANIZATION_ID

ANDRCT.TRANSACTION_TYPE = 'RETURN TO VENDOR'

ANDAP_INVOICES_PKG.GET_APPROVAL_STATUS(

AIA.INVOICE_ID,

AIA.INVOICE_AMOUNT,

AIA.PAYMENT_STATUS_FLAG,

AIA.INVOICE_TYPE_LOOKUP_CODE)'APPROVED'

ANDAIL.AMOUNT0

ANDAIA.INVOICE_NUM= P_INV_NUM

) TMPV


GROUP BY TMPV.INVOICE_NUM,

TMPV.PO_NUM,

TMPV.ITEM,

TMPV.UOM ,

TMPV.CURRENCY_CODE,

TMPV.PO_UNIT_PRICE,

TMPV.VENDOR_NUM,

TMPV.VENDOR_NAME,

TMPV.VENDOR_SITE

ORDER BY TMPV.VENDOR_NUM,TMPV.VENDOR_SITE,TMPV.ITEM;复制代码

回复

使用道具 举报

千问 | 2021-1-23 14:14:07 | 显示全部楼层
你说的是 where 1=1的问题,而那个贴子中说的是 rownum=1的问题,这不是一回事儿。
回复

使用道具 举报

千问 | 2021-1-23 14:14:07 | 显示全部楼层
这里的 where 1 = 1 ,没什么正经用,就是为了后面的 and and and 这些条件;
不是动态的,干掉他也无妨;
回复

使用道具 举报

千问 | 2021-1-23 14:14:07 | 显示全部楼层
bfc99 发表于 2016-5-10 17:05
你说的是 where 1=1的问题,而那个贴子中说的是 rownum=1的问题,这不是一回事儿。

搞错了


回复

使用道具 举报

千问 | 2021-1-23 14:14:07 | 显示全部楼层
这俗称“占位符”,就是为了动态拼接SQL方便的。
回复

使用道具 举报

千问 | 2021-1-23 14:14:07 | 显示全部楼层
3楼说的对,注意是为了后面的动态条件可以以' and ....' 拼接上来, 不管有多少个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行