在 MYSQL 中交叉应用
Posted
技术标签:
【中文标题】在 MYSQL 中交叉应用【英文标题】:Cross apply in MY SQL 【发布时间】:2018-08-19 05:42:09 【问题描述】:我正在尝试将此 Sql 服务器脚本转换为 mysql。
SELECT A.*
FROM TableA A
CROSS APPLY
(
SELECT TOP 1 UID
FROM TableB
WHERE BetID = A.BetID
AND BETCODE = A.BETCODE
ORDER BY CASE WHEN InfoCode > '' THEN 0 ELSE 1 END,UID
)Z
WHERE Z.UID = A.UID
请告知如何,我知道我可以更改 CROSS JOIN 和限制 1 但仍然失败
【问题讨论】:
【参考方案1】:你不能使用 TOP 但使用限制,所以你可以尝试在 MySql 中,子查询表的范围与 SQL_SERVER 不同,所以你必须在子查询中构建连接
SELECT A.*
FROM TableA A
CROSS JOIN
( SELECT UID
FROM TableB
INNER JOIN TABLEA A ON BetID = A.BetID
AND BETCODE = A.BETCODE
ORDER BY CASE WHEN InfoCode > '' THEN 0 ELSE 1 END,UID
LIMIT 1
) Z
WHERE Z.UID = A.UID
或者只有一个结果的交叉连接也可以翻译为内连接
SELECT A.*
FROM TableA A
INNER JOIN
( SELECT UID
FROM TableB
INNER JOIN TABLEA A ON BetID = A.BetID
AND BETCODE = A.BETCODE
ORDER BY CASE WHEN InfoCode > '' THEN 0 ELSE 1 END,UID
LIMIT 1
) Z ON Z.UID = A.UID
【讨论】:
我都试过了,都给我错误,比如'where子句'中的未知列'A.BetID' 答案已更新 .. 在子查询中为范围问题添加了内部联接 ..以上是关于在 MYSQL 中交叉应用的主要内容,如果未能解决你的问题,请参考以下文章