mysql - MYSQL中的交叉应用

标签 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 但仍然失败

最佳答案

您不能使用 TOP,但可以使用 limit,因此您可以尝试,在 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

关于mysql - MYSQL中的交叉应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914828/

相关文章:

SQL 从 XML 中获取列的逗号分隔值

sql - OPENJSON 与 NULL 值交叉应用 (SQL)

php - 使用循环将此数组转换为字符串的逻辑

php - 性能 - MySQL 或 PHP 中的 order by

MySQL - 在查询中更新 WHERE 字段,LIMIT 被拒绝

mysql - 最好使用哪种 SQL

mysql - 获取mysql中的多行和单行

sql-server - CROSS APPLY 与表值函数限制性能

json - 如何将复杂的 JSON 字符串放入 SQL Server 列中