Mysql MS Access是否检查下一个相关记录,以在表单中弹出一个指示器?
我有一个连接到MySQL数据库的MS Access表单。此表格包含人口统计和实验室数据。实验室数据在多方面呈1:n关系 以下是样本实验室数据:Mysql MS Access是否检查下一个相关记录,以在表单中弹出一个指示器?,mysql,vba,ms-access,Mysql,Vba,Ms Access,我有一个连接到MySQL数据库的MS Access表单。此表格包含人口统计和实验室数据。实验室数据在多方面呈1:n关系 以下是样本实验室数据: Lab\u tbl ID(pk)动物ID(fk)水果日期 1001香蕉1/1/13 1011苹果2/6/12 1022香蕉2/4/13 1031苹果1/13/14 1043菠萝3/1/12 1052香蕉8/16/10 我想让表单告诉用户,一只动物改变了它在桌子上吃的食物的类型。我对vba有一些了解,主要是在显示方面,所以更改表单不是问题。我完成的前几个步
Lab\u tbl
ID(pk)
动物ID(fk)
水果
<代码>日期
100
<代码>1<代码>香蕉<代码>1/1/13
101
<代码>1<代码>苹果<代码>2/6/12
102
<代码>2<代码>香蕉<代码>2/4/13
103
<代码>1<代码>苹果<代码>1/13/14
104
<代码>3<代码>菠萝3/1/12
105
<代码>2<代码>香蕉<代码>8/16/10
我想让表单告诉用户,一只动物改变了它在桌子上吃的食物的类型。我对vba有一些了解,主要是在显示方面,所以更改表单不是问题。我完成的前几个步骤是运行按动物ID分组和按水果ASC排序。我不能依赖于要求数据库检查ID+1,因为添加记录的顺序与其动物ID不连续。我想我需要首先选择*FROM Lab\u Tbl order BY Fruit ASC,Animal\u ID ASC
。我需要帮助来指出动物吃了不同类型的水果。下面演示了以下查询,该查询将为您提供特定动物ID吃的最新水果和以前吃的水果。
:
SELECT mt.Animal_ID, mt.id, Fruit AS NewestFruitEaten,
(
SELECT st.Fruit
FROM Lab_tbl AS st
WHERE st.ID < mt.ID AND st.Animal_ID = 1
ORDER BY st.ID DESC
LIMIT 1
) AS OldFruitEaten
FROM Lab_tbl AS mt
WHERE mt.Animal_ID = 1
ORDER BY mt.ID DESC
LIMIT 1
编辑,使用以下查询()获取食用多种水果的动物列表:
选择不同的t1.Animal\u ID
来自实验室tbl t1
t1上的内部连接实验室tbl t2。动物ID=t2。动物ID
和t1。水果t2。水果
是的,您的第一个查询只告诉我每个动物有2个值,表中的animal 1有3个值。将检查第二个。最后输入的记录是动物吃的最新水果,对吗?上面的查询得到那个水果,然后将它与动物吃的倒数第二个东西进行比较。你想知道是否有特定的动物吃过不止一种水果吗?是的,还有所有吃过不止一种水果的动物的列表。我不需要计算每只动物吃的水果,只需要计算它是否吃了不同的水果。@user3293827,我编辑了我的答案,为您提供了一个查询,该查询将显示所有吃了多种水果的动物。这就是你想要的吗?
SELECT DISTINCT did.Animal_ID,
(
SELECT mt.Fruit
FROM Lab_tbl AS mt
WHERE mt.Animal_ID = did.Animal_ID
ORDER BY mt.ID DESC
LIMIT 1
) AS NewestFruitEaten,
(
SELECT st.Fruit
FROM Lab_tbl AS st
WHERE st.ID <
(
SELECT sst.ID
FROM Lab_tbl AS sst
WHERE sst.Animal_ID = did.Animal_ID
ORDER BY sst.ID DESC
LIMIT 1
)
AND st.Animal_ID = did.Animal_ID
ORDER BY st.ID DESC
LIMIT 1
) AS OlderFruitEaten
FROM Lab_tbl AS did
SELECT DISTINCT t1.Animal_ID
FROM Lab_tbl t1
INNER JOIN Lab_tbl t2 ON t1.Animal_ID = t2.Animal_ID
AND t1.Fruit <> t2.Fruit