在MY SQL中交叉应用

时间:2018-08-19 05:42:09

标签: mysql cross-apply

我正在尝试将此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和Limit 1,但仍然失败

1 个答案:

答案 0 :(得分:0)

在您不能使用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