【问题标题】:Cross apply in MY SQL在 MYSQL 中交叉应用
【发布时间】: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 但仍然失败

【问题讨论】:

    标签: mysql cross-apply


    【解决方案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'
    • 答案已更新 .. 在子查询中为范围问题添加了内部联接 ..
    猜你喜欢
    • 2016-08-20
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多