2010-08-25 126 views
2

當我沒有在我的計算機表中設置ProcessorID時,我的查詢不起作用 當我在處理器ID或NULL中分配值時,如何使查詢顯示ProcessorName, T'SQL與空值連接

CREATE TABLE myProcessor 
( 
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
Name VARCHAR(255) NOT NULL 
) ENGINE=InnoDB; 

INSERT INTO myProcessor (Name) VALUES ("xeon"); 

CREATE TABLE myComputer 
(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
Name VARCHAR(255) NOT NULL, 
ProcessorID INT DEFAULT NULL, 
FOREIGN KEY (ProcessorID) REFERENCES myProcessor(ID) ON DELETE CASCADE 
) ENGINE=InnoDB; 

INSERT INTO myComputer (Name) VALUES ("Newton"); 

SELECT p.Name as ProcessorName, c.Name as ComputerName 
FROM myComputer c, myProcessor p 
WHERE c.ProcessorID = p.ID 
AND c.Name = "Newton"; 

上面的select查詢當前返回null,如果尚未設置processorID。

回答

7

如果計算機未分配處理器,則您當前的查詢將不會返回任何行,如您提供的示例中所示。

您可能需要使用一個left outer join,而不是你使用的是隱inner join

SELECT  p.Name as ProcessorName, c.Name as ComputerName 
FROM  myComputer c 
LEFT JOIN myProcessor p ON (c.ProcessorID = p.ID) 
WHERE  c.Name = "Newton"; 

返回:

+---------------+--------------+ 
| ProcessorName | ComputerName | 
+---------------+--------------+ 
| NULL   | Newton  | 
+---------------+--------------+ 
1 row in set (0.00 sec) 
2
SELECT p.Name as ProcessorName, m.Name as ComputerName FROM myComputer m 
    LEFT JOIN myProcessor p ON (m.ProcessorID = p.ID) 
    WHERE m.Name = "Newton" 
+0

你在那裏有一個小錯字。 'c.Name'應該是'm.Name'。 – 2010-08-25 04:46:28

+0

哎呀,忘了編輯複製你的答案之後 – 2010-08-25 04:48:33