1. 程式人生 > 其它 >Thinkphp6 中連線 SQL Server 並使用子查詢報錯:當沒有用 EXISTS 引入子查詢時,在選擇列表中只能指定一個表示式

Thinkphp6 中連線 SQL Server 並使用子查詢報錯:當沒有用 EXISTS 引入子查詢時,在選擇列表中只能指定一個表示式

Thinkphp6 中連線 SQL Server 並使用子查詢報錯

語句

列印 SQL 語句

MySQL 下

SELECT `NickName`,`Gender`,`Mobile`,`RealName`,`Birthday` FROM `SiteCustomerSupplement` `s` 

INNER JOIN `WxUser` `u` ON `u`.`OpenId`=`s`.`OpenId`

WHERE `s`.`OpenId` IN (SELECT DISTINCT `OpenId` FROM `WxPackagesOrder` WHERE `OrderStatus` >=
40 AND `RegionId` = 72) AND `Birthday` BETWEEN '2021-10-26' AND '2021-11-02'

SQL Server 下

SELECT T1.* FROM (SELECT thinkphp.*, ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM (SELECT [NickName],[Gender],[Mobile],[RealName],[Birthday] FROM [SiteCustomerSupplement] [s] 

INNER JOIN [WxUser] [u] ON
[u].[OpenId]=[s].[OpenId]

WHERE [s].[OpenId] IN (SELECT T1.* FROM (SELECT thinkphp.*, ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM (SELECT DISTINCT [OpenId] FROM [WxPackagesOrder] WHERE [OrderStatus] >= 40 AND [RegionId] = 72) AS thinkphp) AS T1) AND [Birthday] BETWEEN '2021-10-26' AND '2021-11-02
') AS thinkphp) AS T1

很明顯比 MySQL 的語句長了很多,主要是這一段

SELECT thinkphp.*, ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM

那麼問題來了怎麼解決?換成原生的語句就好了,不要用 tp 內部封裝的。

分情破愛始亂棄,流落天涯思別離。 如花似玉負情意,影如白晝暗自迷。 隨風浮沉千葉落,行色匆匆鬢已稀。