我需要使用一个查询,该查询首先确定拥有发票的客户列表,然后使用该列表来识别那些 没有发票。我必须使用NOT IN关键字。
以下是每个表的SQL代码:
CREATE TABLE CUSTOMER (
CUS_CODE NUMBER PRIMARY KEY,
CUS_LNAME VARCHAR(15) NOT NULL,
CUS_FNAME VARCHAR(15) NOT NULL,
CUS_INITIAL CHAR(1),
CUS_AREACODE CHAR(3) DEFAULT '615' NOT NULL CHECK(CUS_AREACODE IN ('615','713','931')),
CUS_PHONE CHAR(8) NOT NULL,
CUS_BALANCE NUMBER(9,2) DEFAULT 0.00,
CONSTRAINT CUS_UI1 UNIQUE(CUS_LNAME,CUS_FNAME))
CREATE TABLE INVOICE (
INV_NUMBER NUMBER PRIMARY KEY,
CUS_CODE NUMBER NOT NULL REFERENCES CUSTOMER(CUS_CODE),
INV_DATE DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT INV_CK1 CHECK (INV_DATE > TO_DATE('01-JAN-2012','DD-MON-YYYY')))
从客户结果中选择*:
从发票结果中选择*:
我不确定如何开始。
由于
答案给出:
答案 0 :(得分:3)
SELECT *
FROM CUSTOMER
WHERE CUS_CODE NOT IN (SELECT CUS_CODE FROM INVOICE)
答案 1 :(得分:2)
您只需获取CUSTOMER
中INVOICE
中没有记录的所有行:
SELECT * FROM customer c
WHERE c.cus_code NOT IN ( SELECT i.cus_code FROM invoice i );
然而,反连接可能会更有效:
SELECT * FROM customer c
WHERE c.cus_code NOT IN ( SELECT i.cus_code FROM invoice i
WHERE i.cus_code = c.cus_code );
编辑:请参阅SQL Fiddle here - 我添加了一个ORDER BY
子句,以匹配上面给出的所需结果。