从访问查询创建 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 查询的主要内容,如果未能解决你的问题,请参考以下文章