带有帮助列的SQL-Statement Union

问题描述 投票:0回答:1

我需要帮助来构建一个SQL语句。 Database-Schema看起来像这样: Database-Schema

我确实准备了以下SQL-Fiddle,它包含样本数据:http://sqlfiddle.com/#!9/528a4e/1

要求#1: 我想从表“计算机”中获取所有计算机。 SQL语句看起来像这样:

SELECT ComputerID, ComputerName
FROM computers

要求#2: 我想让所有计算机映射到PrinterID = 1的打印机.SQL语句看起来像这样:

SELECT computermapping.ComputerID, computers.ComputerName
FROM computermapping
JOIN computers ON computermapping.ComputerID = computers.ComputerID
JOIN Printers ON computermapping.PrinterID = printers.PrinterID 
WHERE computermapping.PrinterID = 1

要求#3: 到现在为止还挺好。现在我需要更复杂的东西。我想加入booth查询的结果,以获得一个独特的计算机列表。那些由“要求#2”选择的计算机应该以某种方式标记。结果应该是这样的:

Wanted-Result

我感谢您的帮助。

谢谢!

mysql sql
1个回答
1
投票

如果你想要所有的电脑,请从left join开始:

SELECT c.ComputerID, c.ComputerName,
       ( cm.ComputerId IS NOT NULL) as hasPrinterFlag
FROM computers c LEFT JOIN
     computermapping cm
     ON cm.ComputerID = c.ComputerID  AND cm.PrinterID = 1 ;

在你的情况下,我认为你不需要Printers表。所有信息似乎都在computermapping中(除非打印机可能在映射表中,但不在Printers表中,这似乎不太可能)。

Here是SQL小提琴。

© www.soinside.com 2019 - 2024. All rights reserved.