出于某种原因,即使我知道答案可能正在盯着我,但我似乎无法弄清楚这一点。
我有两个表,DEVICES
和DEVICE_OWNER
。
这里的关系是一对多的。
DEVICES
列为pk_device_id
,DEVICE_OWNER
列为fk_device_id, assigned_date, and fk_staff_id
。
我正在尝试创建一个视图,该视图将根据assigned_date显示所有设备以及最后一个fk_staff_ID
。我根据本网站上的其他答案写了这个视图,它显示了我想要的内容但MySQL不会让我将其保存为视图,任何人都可以提供任何建议吗?
SELECT
deow.fk_staff_id,
devices.*
FROM
devices_owner deow
INNER JOIN (
SELECT
fk_device_id,
MAX(assigned_date) AS MaxDateTime,
fk_staff_id
FROM
devices_owner
GROUP BY
FK_DEVICE_ID
) groupeddeow ON deow.FK_DEVICE_ID = groupeddeow.fk_device_id
AND deow.ASSIGNED_DATE = groupeddeow.MaxDateTime
RIGHT JOIN devices ON devices.PK_DEVICE_ID = deow.FK_DEVICE_ID
答案 0 :(得分:0)
此版本应该在FROM子句
中没有子查询的情况下工作SELECT `do`.fk_staff_id
FROM devices AS `d`
LEFT JOIN devices_owner AS `do` ON `d`.pk_device_id = `do`.fk_device_id
WHERE `do`.fk_device_id IS NULL
OR (`do`.fk_device_id, `do`.assigned_date)
IN (SELECT fk_device_id, MAX(assigned_date)
FROM devices_owner
GROUP BY fk_device_id
)
;
OR
可能(可能会)损害性能,所以你可能想要UNION两个版本的查询(每个条件一个)...假设VIEWs也没有限制。< / p>
编辑:详细说明这种情况......
(`do`.fk_device_id, `do`.assigned_date)
IN (SELECT fk_device_id, MAX(assigned_date)
FROM devices_owner
GROUP BY fk_device_id
)
当子查询的结果集包含与外部查询的候选结果行中的值完全匹配的结果行时,此计算结果为true。
这是对这种逻辑的一种变化(从最简单到更复杂的例子):
正在详细阐述的条件基本上只是将这些示例右侧的值列表替换为将被视为此类列表的子查询。