-1

Customers と Call_center_logs の 2 つのテーブルがあります。

ここに 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/Smith を記録するだけです。

以下に示すように、私は 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

適切な構文は何ですか?

4

3 に答える 3

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 を返します。

于 2013-05-29T17:19:37.520 に答える
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

于 2013-05-29T17:20:24.817 に答える
1

Stackoverflow と sqlfiddle でのクエリは異なります。

あなたは"Select * from call_center_log"代わりに書いた"select customer_id from call_center_log"

于 2013-05-29T17:20:35.387 に答える