带有辅助列

时间:2018-02-04 23:00:10

标签: mysql sql

我需要帮助来构建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

感谢您的帮助。

谢谢!

1 个答案:

答案 0 :(得分: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小提琴。