【问题标题】:Convert MS Access query with subquery to MySQL将带有子查询的 MS Access 查询转换为 MySQL
【发布时间】:2014-10-11 11:55:34
【问题描述】:

对于我的网站(PHP / MySql),我需要一些管理信息。 在测试期间,我能够在 MS Access 中生成一个有效的查询。

子查询‘qryUnion’:

SELECT Mailadres, Registrationdate FROM tbl-A 
UNION 
SELECT Mailadres, Registrationdate FROM tbl-B;

主要查询:

SELECT Year([Maildate]) & '-' & Month([Maildate]) AS MonthMailed, Count(tbl-C.Mailadres) AS Prospects, Count(qryUnion.Mailadres) AS Members
FROM tbl-C LEFT JOIN qryUnion ON tbl-C.Mailadres = qryUnion.Mailadres
GROUP BY Year([Maildate]) & '-' & Month([Maildate]);

我想把它转换成 MySql 数据库。我尝试使用别名或临时表,但无法获得运行代码。有人知道怎么做吗?

【问题讨论】:

  • 任何错误信息?首先,Access 在表名周围使用(可选)[ .. ] 来转义名称中的空格等特殊字符。我认为 MySQL 为此使用了反引号:`。其他事情:& for concat 在 MySQL 中是不同的。也许|| 有效,否则使用CONCAT 函数。其余的,请阅读您收到的错误消息并尝试一一解决。基本查询语法是相同的,但有些不同。
  • 在 MS Access 中,我得到了正确的信息。我仍在寻找在 MySql 中处理此问题的正确方法。所以,我还没有任何错误。
  • 你说“我无法获得运行代码”。我假设您已尝试运行它,但在尝试时出现了一些错误,或者我完全误解了您所说的 “将此 [查询?] 转换为 MySQL” 的意思?
  • 也许您应该从展示您在 MySQL 中所做的尝试开始。毕竟,这就是您要开始工作的部分。
  • 例如,我试过: (SELECT ‘Mailadres’, ‘Registrationdate’ FROM ‘tbl-A’ Union SELECT ‘Mailadres’, ‘Registrationdate’ FROM ‘tbl-B’) INTO #GOS;从#GOS中选择*;回复:#1064 - 您的 SQL 语法有错误;

标签: mysql join subquery union


【解决方案1】:

将联合移动到内联视图,如下所示。

您可能还必须将添加的字符串替换为 CONCAT() 函数,并将 int 转换为 CHAR。我不确定我的语法是否正确,但这可能很接近。

SELECT concat(cast(Year(`Maildate`) AS CHAR),'-',CAST(Month(`Maildate`) AS CHAR) AS MonthMailed, 
Count(tbl-C.Mailadres) AS Prospects, Count(qryUnion.Mailadres) AS Members
FROM tbl-C 
LEFT JOIN 
 (SELECT Mailadres, Registrationdate FROM tbl-A 
  UNION 
  SELECT Mailadres, Registrationdate FROM tbl-B) qryUnion
  ON tbl-C.Mailadres = qryUnion.Mailadres
GROUP BY concat(cast(Year(`Maildate`) AS CHAR),'-',CAST(Month(`Maildate`) AS CHAR);

已更正)在年份评估中的错误位置并转换为字符。的选择和分组依据。

【讨论】:

  • 我试过了(在我的数据库中转换为正确的表名和列名之后)。回复:#1064。然后我在这些名字周围加上引号。按照我的数据库中尝试的代码。回复:再次 #1064
  • SELECT concat(cast(Year('Maildatum' AS CHAR)),'-',CAST(Month('Maildatum') AS CHAR) AS MonthMailed, Count('tblProspects'.'Mailadres' ) AS Prospects, Count(qryUnion.'Mailadres') AS Members FROM 'tblProspects' LEFT JOIN (SELECT 'Mailadres', 'Registratiedatum' FROM 'tblGastouder' UNION SELECT 'Mailadres', 'Registratiedatum' FROM 'tblUitgeschreven') qryUnion ON ' tblProspects'.'Mailadres' = qryUnion.'Mailadres' GROUP BY concat(cast(Year('Maildatum' AS CHAR)),'-',CAST(Month('Maildatum') AS CHAR);
  • NM Don't ) 在选择中关闭。
猜你喜欢
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多