2012-11-23 72 views
0

我想创建一个查询,显示所有发生罚款但没有驾驶执照的人的姓名和地址。 (所以不要出现在驾驶执照表中)我将如何处理包括没有出现在表格中的东西?MYSQL设计查询问题

这里是我的表

CREATE TABLE offences (
oOffenceID VARCHAR (30), 
oDescription VARCHAR (200), 
oMaximumFine INT (10), 
CONSTRAINT o_pk 
PRIMARY KEY (oOffenceID) 
); 

CREATE TABLE drivers (
dPersonID VARCHAR (30), 
dLicenseNumber INT (20), 
dLicenseRemoved ENUM('yes','no'), 
dExpiryDate DATE, 
CONSTRAINT d_pk 
PRIMARY KEY (dLicenseNumber), 
CONSTRAINT d_fk 
FOREIGN KEY (dPersonId) 
REFERENCES People (pPersonID) 
); 

CREATE TABLE people (
pPersonID VARCHAR (30), 
pName VARCHAR (30), 
pAddress VARCHAR (50), 
pNIN VARCHAR (30), 
CONSTRAINT p_pk 
PRIMARY KEY (pPersonID) 
); 

CREATE TABLE vehicle (
vOwnerID VARCHAR (30), 
vColour VARCHAR (30), 
vModel VARCHAR (30), 
vMake VARCHAR (30), 
vVehicleID VARCHAR (30), 
CONSTRAINT v_pk 
PRIMARY KEY (vVehicleID), 
CONSTRAINT v_fk 
FOREIGN KEY (vOwnerID) 
REFERENCES People (pPersonID) 
); 

CREATE TABLE fines (
fFineID INT (30) AUTO_INCREMENT, 
fVehicleID VARCHAR (30), 
fPersonID VARCHAR (30), 
fTime DATE, 
fAmount INT (10), 
fOfficerStatement VARCHAR (500), 
fOffenceID VARCHAR (30), 
CONSTRAINT f_pk 
PRIMARY KEY (fFineID), 
CONSTRAINT f_fk 
FOREIGN KEY (fVehicleID) 
REFERENCES vehicle (vVehicleID), 
CONSTRAINT f_fk1 
FOREIGN KEY (fPersonID) 
REFERENCES people (pPersonID), 
CONSTRAINT f_fk2 
FOREIGN KEY (fOffenceID) 
REFERENCES offences (oOffenceID) 
); 

到目前为止,我有

SELECT DISTINCT pName, pAddress 
FROM people, fines, drivers 
WHERE 
pPersonID <> dPersonID 
AND 
pPersonID = fPersonID 
AND 
fAmount > 0 

但这不会删除所有必要的数据。 任何帮助或指导正确的工具使用将不胜感激。

回答

1

使用LEFT JOIN和检查NULL值

例如:

SELECT * 
FROM 
table_A 
LEFT JOIN table_B 
ON table_A.id = table_b.a_id 
WHERE table_B.a_id IS NULL 
+0

啊真棒三江源,如果连接在一起,将是唯一一个空值! – user1744093

+0

谢谢,很高兴你发现我的答案有用。你介意接受这个答案吗? –