我需要帮助来构建SQL语句。Database-Schema看起来如下所示:

我确实准备了以下SQL-Fiddle,其中包含示例数据:http://sqlfiddle.com/#!9/831bab/1
对于sample中的示例数据,我希望查询计算机名"Client02“,并希望得到以下结果:
想要结果1
PrinterName | PrintServer | PrinterActive | ComputerActive | isDefaultPrinter
PRT01_Zentral | DC01 | True | True | False
PRT02_BH | DC01 | True | True | True对于sample中的示例数据,我希望查询计算机名"Client01“,并希望得到以下结果:
想要结果2
PrinterName | PrintServer | PrinterActive | ComputerActive | isDefaultPrinter
PRT01_Zentral | DC01 | True | True | True正如您所看到的,我需要连接所有的表,并添加类似于助手列的内容,该列包含有关默认打印机的信息。(真/假)
我开始建立查询,但我不知道该如何进行.
SELECT printers.PrinterName, printers.PrintServer, printers.PrinterActive
FROM computermapping
LEFT JOIN computers ON computermapping.ComputerID = computers.ComputerID
LEFT JOIN printers ON computermapping.PrinterID = printers.PrinterID
LEFT JOIN computerdefaultprinter ON computers.ComputerID = computerdefaultprinter.ComputerID
WHERE computers.ComputerName = "Client02" 我想我的请求包含了所有需要的信息。sample有示例数据,可以轻松地复制它。WantedResults应该清楚地显示目标。
编辑:
DBMS: MySQL
发布于 2018-02-09 10:32:35
您可以使用以下查询来获得所需的结果
SELECT printers.PrinterName,
printers.PrintServer,
printers.PrinterActive,
computers.ComputerActive,
CASE
WHEN computerdefaultprinter.PrinterID IS NULL THEN "false"
ELSE "true"
END AS isDefaultPrinter
FROM computermapping
LEFT JOIN computers
ON computermapping.ComputerID = computers.ComputerID
LEFT JOIN printers
ON computermapping.PrinterID = printers.PrinterID
LEFT JOIN computerdefaultprinter
ON computers.ComputerID = computerdefaultprinter.ComputerID
AND printers.PrinterID = computerdefaultprinter.PrinterID
WHERE computers.ComputerName = "Client02" 我只添加了CASE...WHEN语句和修改了原始查询的联接条件。但我认为,与其使用表computerdefaultprinter,不如将列IsDefaultPrinter添加到表computermapping中。
CREATE TABLE `computermapping` (
`ComputerMappingID` int(11) NOT NULL,
`PrinterID` int(11) NOT NULL,
`ComputerID` int(11) NOT NULL,
`IsDefaultPrinter` int(1) NOT NULL DEFAULT 0,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;发布于 2018-02-09 09:19:03
我所做的是在查询中添加一个if语句,将内部结果(只能是1)与外部选择进行比较。也许有更好的方法来实现这一点,但这个答案反映了您所要求的查询结果。
编辑:我假设每台计算机只有一台默认打印机。你确定通缉结果2是正确的吗?因为在数据库中,记录显示computer1有1 printerid (1),这是默认的,而computer2有2打印机(1和2),2是默认的。
SELECT printers.PrinterName,
printers.PrintServer,
printers.PrinterActive,
IF (
(SELECT computerdefaultprinter.printerid
FROM computerdefaultprinter
WHERE computerdefaultprinter.computerid = computermapping.computerid) = computermapping.printerid,
'true',
'false') AS isDefaultPrinter
FROM computermapping
LEFT JOIN computers ON computermapping.ComputerID = computers.ComputerID
LEFT JOIN printers ON computermapping.PrinterID = printers.PrinterID
LEFT JOIN computerdefaultprinter ON computers.ComputerID = computerdefaultprinter.ComputerID
WHERE computers.ComputerName = "Client02"https://stackoverflow.com/questions/48702180
复制相似问题