2013-05-29 23 views
-1

我有兩個Customers和Call_center_logs表。mySQL中的NOT IN語法幫助

這裏是SQL 的Sqlfiddle是在這裏:http://sqlfiddle.com/#!2/5da69/3

CREATE TABLE `Call_Center_Log` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Customer_ID` int(11) DEFAULT NULL, 
    `Date_Done` date DEFAULT NULL, 
    PRIMARY KEY (`ID`)); 


CREATE TABLE `Customer` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Criteria` varchar(45) DEFAULT NULL, 
    `Criteria1` int(11) DEFAULT NULL, 
    `Criteria2` int(11) DEFAULT NULL, 
    `Criteria3` int(11) DEFAULT NULL, 
    `Ctiteria4` varchar(45) DEFAULT NULL, 
    `state` varchar(45) DEFAULT NULL, 
    `last_name` varchar(45) DEFAULT NULL, 
    `Priority` int(11) DEFAULT NULL, 
    `first_name` varchar(45) DEFAULT NULL, 
    `company_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`ID`)); 

INSERT INTO `Customer` (`Criteria`, `Criteria1`, `Criteria2`, `Criteria3`, `state`, `last_name`, `Priority`, `first_name`, `company_id`) VALUES ('Gold', '10001', '999998', '1001', 'CT', 'Smith', '5', 'Jim', '1'); 
INSERT INTO `Customer` (`Criteria`, `Criteria1`, `Criteria2`, `Criteria3`, `state`, `last_name`, `Priority`, `first_name`, `company_id`) VALUES ('Gold', '10001', '999998', '1001', 'ME', 'Jones', '9', 'Tom', '2'); 
INSERT INTO `Customer` (`Criteria`, `Criteria1`, `Criteria2`, `Criteria3`, `state`, `last_name`, `Priority`, `first_name`,`company_id`) VALUES ('Silver', '9999', '1000000', '999', 'TX', 'Tanaka', '3', 'Yoshi', '3'); 
INSERT INTO `Customer` (`Criteria`, `Criteria1`, `Criteria2`, `Criteria3`, `state`, `last_name`, `Priority`, `first_name`,`company_id`) VALUES ('Gold', '10001', '999998', '1001', 'CT', 'Blake', '13', 'Tom', '1'); 
INSERT INTO `Customer` (`Criteria`, `Criteria1`, `Criteria2`, `Criteria3`, `state`, `last_name`, `Priority`, `first_name`,`company_id`) VALUES ('SIlver', '9999', '1000000', '999', 'TX', 'Nakamoto', '3', 'Kesuke', '1'); 

INSERT INTO `Call_Center_Log` (`Customer_ID`, `Date_Done`) VALUES ('2', '2013-05-29'); 
INSERT INTO `Call_Center_Log` (`Customer_ID`, `Date_Done`) VALUES ('3', '2013-05-29'); 
INSERT INTO `Call_Center_Log` (`Customer_ID`, `Date_Done`) VALUES ('4', '2013-05-29'); 
INSERT INTO `Call_Center_Log` (`Customer_ID`, `Date_Done`) VALUES ('5', '2013-04-01'); 

我需要找出什麼是客戶符合下列條件:(這只是正常)

SELECT * 
FROM Customer 
WHERE Criteria= 'Gold' 
AND Criteria1 > 10000 
AND Criteria2 < 999999 
AND Criteria3 >1000 
AND state IN('CT','ME','IL','NV') 
AND (Ctiteria4 is null OR Ctiteria4 ='') 
Order by Priority DESC 

它給我記錄

ID Last Name etc.... 
4  Blake 
2  Jones 
1  Smith 

我的打嗝來了在我必須弄清楚上述標準的同時,我還需要排除今天已經被叫的客戶。這將使我簡單地記錄ID 1 /史密斯。

我正在摸索着一個NOT IN,如下圖所示。

SELECT * 
    FROM Customer 
    WHERE Criteria= 'Gold' 
    AND Criteria1 > 10000 
    AND Criteria2 < 999999 
    AND Criteria3 >1000 
    AND state IN('CT','ME','IL','NV') 
    AND (Ctiteria4 is null OR Ctiteria4 ='') 
    --> AND ID not in (Select Customer_ID FROM Call_Center_Log WHERE Customer_ID = id AND Taked_to_date > CURDATE()) 
    Order by Priority DESC 

什麼是正確的語法?

+0

請發表您使用下一次的確切代碼.. –

+0

這是確切的代碼..... – JVMX

+0

正如其他人所提到的,你'在選擇*'你的子查詢sql小提琴,但'在您的文章中選擇Customer_ID' ..這是問題。 –

回答

3

你的語法在你的提琴八九不離十:

SELECT * 
FROM Customer 
WHERE Criteria= 'Gold' 
    AND Criteria1 > 10000 
    AND Criteria2 < 999999 
    AND Criteria3 > 1000 
    AND state IN ('CT','ME','IL','NV') 
    AND (Ctiteria4 is null OR Ctiteria4 ='') 
    AND Customer.id NOT IN 
    (SELECT Customer_Id 
    FROM Call_Center_Log 
    WHERE Customer_ID = Customer.id 
     AND Date_Done >= curdate()) 
ORDER BY Priority DESC 

只需要select customer_id,而不是select * - 然後返回記錄1.

+0

Arg!那該死的*總讓我陷入困境。謝謝! – JVMX

+1

@JVMX - 不用擔心,很高興我能幫上忙。 – sgeddes

1

錯誤消息是:

Operand should contain 1 column(s) 

這是因爲你的子查詢:

Select * From Call_Center_Log where Customer_ID = Customer.id AND Date_Done >= curdate() 

回報所有領域。

爲了解決這個問題,只是改變*Customer_ID

http://sqlfiddle.com/#!2/5da69/9

1

你在#1,並在sqlfiddle查詢是不同的。

你寫"Select * from call_center_log"代替"select customer_id from call_center_log"