从访问查询创建 MySQL 查询

Posted

技术标签:

【中文标题】从访问查询创建 MySQL 查询【英文标题】:Creating MySQL query from access query 【发布时间】:2019-06-01 23:26:26 【问题描述】:

我正在尝试将 Access 查询转换为 mysql。我对 MySQL 很满意,但我不确定如何整合它。我认为来自 Access 的第二个查询需要成为第一个查询中 MySQL 的子查询,我只是不知道放在哪里。此查询将作为事件在 MySQL 服务器上运行。

访问查询作为两个运行,第一个,它确定确定事务的事务 ID。我已经转换为 MySQL 并且可以正常工作是:

SELECT DISTINCT t.patient_id, MAX(t.id) AS MaxOfid
FROM transactions AS t
INNER JOIN disposition_transaction_type AS dt
    ON t.disposition_transaction_type_id = dt.id
INNER JOIN dispositions AS d
    ON dt.disposition_id = d.id 
WHERE (d.member_status = "Unenrolled" AND (t.created_at BETWEEN '2019-05-01' AND '2019-05-31')) OR ((t.created_at BETWEEN '2019-05-01' AND '2019-05-31') AND (t.disposition_transaction_type_id = 24))
GROUP BY t.patient_id;

哪个生产者正确返回

+------------+---------+
| patient_id | MaxOfid |
+------------+---------+
|         10 |       8 |
+------------+---------+
|        112 |    4321 |
+------------+---------+

第二个查询,确定患者的决定性倾向和状态:

SELECT qryAgreedToServiceOrUnenrolled.patient_id, dispositions.description, dispositions.member_status
FROM ((qryAgreedToServiceOrUnenrolled 
INNER JOIN transactions ON qryAgreedToServiceOrUnenrolled.MaxOfid = transactions.id) 
INNER JOIN disposition_transaction_type ON transactions.disposition_transaction_type_id = disposition_transaction_type.id) 
INNER JOIN dispositions ON disposition_transaction_type.disposition_id = dispositions.id;

【问题讨论】:

顺便说一下,如果您发现自己以 DISTINCT 开始查询,那么它以 GROUP BY 正确结束(反之亦然)的可能性极小(尽管并非完全不可能) @Strawberry 关于步骤 1-3,#1 与我的问题无关,它是一个选择,而不是插入或创建。 #2 不是在寻找结果集,我只是问,如何将此访问查询添加到我的 mysql 查询中,这就是我需要的帮助... #3 我在帖子中尽了最大的努力。我理解规则和格式的必要性,但帖子必须有一些余地,你可以告诉我我确实在我的帖子中付出了努力,它不像是要求某人为我做所有事情的两行句子。毕竟这是一个寻求帮助的地方。 @Dyasis 您应该再次阅读该指南,因为您完全误解了它!数据结构、样本数据和预期结果确实适用于询问有关选择的问题。为什么?因为这些允许我们在将解决方案作为答案发布之前对其进行测试,从而增加答案正确的机会。 好的,我明白你的意思了。谢谢 【参考方案1】:

假设要运行的第一个查询名为 qryAgreedToServiceOrUnenrolled。尝试将第一个 SQL 嵌套在第二个的 FROM 子句中。可以在引用它的任何地方将qryAgreedToServiceOrUnenrolled 替换为其他别名。

SELECT qryAgreedToServiceOrUnenrolled.patient_id, dispositions.description, dispositions.member_status
FROM ((

    (SELECT DISTINCT t.patient_id, MAX(t.id) AS MaxOfid
    FROM transactions AS t
    INNER JOIN disposition_transaction_type AS dt
        ON t.disposition_transaction_type_id = dt.id
    INNER JOIN dispositions AS d
        ON dt.disposition_id = d.id 
    WHERE (d.member_status = "Unenrolled" AND (t.created_at BETWEEN '2019-05-01' AND '2019-05-31')) OR ((t.created_at BETWEEN '2019-05-01' AND '2019-05-31') AND (t.disposition_transaction_type_id = 24))
    GROUP BY t.patient_id) AS qryAgreedToServiceOrUnenrolled 

INNER JOIN transactions ON qryAgreedToServiceOrUnenrolled.MaxOfid = transactions.id) 
INNER JOIN disposition_transaction_type ON transactions.disposition_transaction_type_id = disposition_transaction_type.id) 
INNER JOIN dispositions ON disposition_transaction_type.disposition_id = dispositions.id;

我同意可能不需要 DISTINCT。

【讨论】:

以上是关于从访问查询创建 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从查询创建表

如何使用 vb.net 从查询创建访问报告

NodeJs 从 MySQL 查询结果创建新数组

从 mysql 中的查询创建视图 - mysql 不允许创建视图

从mysql查询php创建数组

使用 php 从查询 mysql 创建名称和电子邮件