[英]SQL-Query - Join multiple tables with additional dynamic column
我需要有關構建SQL語句的幫助。 數據庫架構如下所示:
我確實准備了下面的SQL-Fiddle ,其中包含示例數據: http : //sqlfiddle.com/#!9/831bab/1
至於SQL小提琴中的樣本數據,我想查詢計算機名稱“ Client02”,並希望得到以下結果:
想要的結果1
PrinterName | PrintServer | PrinterActive | ComputerActive | isDefaultPrinter
PRT01_Zentral | DC01 | True | True | False
PRT02_BH | DC01 | True | True | True
至於SQL小提琴中的樣本數據,我想查詢計算機名稱“ 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"
我認為我的請求包含所有必要的信息。 SQL-Fiddle具有樣本數據,可以輕松地重現它。 WantedResults應該清楚地顯示目標。
編輯:
DBMS:MySQL
我所做的就是在查詢中添加一條if語句,將內部結果(只能為1)與外部選擇項進行比較。 有一種更好的方法可以實現此目的,但是此答案反映了您所詢問的查詢結果。
編輯:我假設每台計算機僅默認打印機。 您確定所需結果2是否正確? 因為在數據庫中,記錄說計算機1具有1默認的printerid(1),計算機2具有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"
您可以使用以下查詢來獲取所需的結果
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.