MySQL连接两个表,其中第二个表中存在单个值

hsgswve4  于 2023-04-28  发布在  Mysql
关注(0)|答案(1)|浏览(121)

我正在尝试为客户端检索所有计算机的列表,需要显示BitLocker是否已启用(ON / OFF)。我看了两张表:计算机BitLocker
我仍然需要列出所有计算机,但如果两个表中都存在computer_name(如SERVER),则我需要确定是否在BitLocker表中为其中一个驱动器启用了位锁定器。
BitLocker表也有一个date_recorded列,因为新记录是按月添加的,所以我必须确保我总是得到最新的记录。
我可以让查询列出所有计算机,但protection_status列完全关闭。**只有服务器应显示ON,其他不显示。**任何帮助都非常感谢。
这是我的查询

select bitlocker.protection_status, computers.* from computers 
left join bitlocker on computers.client_id = bitlocker.client_id 
inner join (select protection_status, max(id) maxID from bitlocker where protection_status = "ON") d
where computers.client_id=72;

这是一个SQL Fiddle。

sr4lhrrt

sr4lhrrt1#

与连接整个bitlocker表不同,连接子查询可以获取每台计算机的最新行。
应该使用computer_name作为表之间的连接条件,而不是client_id

SELECT c.*, IFNULL(b.protection_status, 'Off') AS protection_status
FROM computers AS c
LEFT JOIN (
    SELECT b1.computer_name, b1.protection_status
    FROM bitlocker AS b1
    JOIN (
        SELECT computer_name, MAX(date_recorded) AS maxdate
        FROM bitlocker
        GROUP BY computer_name
    ) AS b2 ON b1.computer_name = b2.computer_name AND b1.date_recorded = b2.maxdate
) AS b ON c.computer_name = b.computer_name
WHERE c.client_id = 72

相关问题