在 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 中交叉应用的主要内容,如果未能解决你的问题,请参考以下文章

sql “交叉应用”版本的mysql

MySQL 中多个模式之间的交叉连接。特权和性能

在sql server中交叉应用

sql在一个交叉应用/案例表达式中设置多个值

在 MERGE 中交叉应用

在树莓派的交叉编译 qt 中构建应用程序时出错