有人可以告诉我这个查询的sytax吗?
“选择不列出作品的每位艺术家的所有信息 画廊“。
(键值为ArtistID)
查询引用2个表:
CREATE TABLE listofartists (
ArtistID INT(11) NOT NULL AUTO_INCREMENT,
LastName CHAR(25) NOT NULL,
FirstName CHAR(25) NOT NULL,
Nationality CHAR(30) DEFAULT NULL,
DateDeceased INT(11) DEFAULT NULL,
DateOfBirth INT(11) DEFAULT NULL,
CONSTRAINT ListOfArtists_PK PRIMARY KEY (ArtistID)
);
CREATE TABLE work (
WorkID INT NOT NULL AUTO_INCREMENT,
Title CHAR(35) NOT NULL,
Copy CHAR(12) NOT NULL,
Medium CHAR(35) DEFAULT NULL,
Description VARCHAR(1000) DEFAULT 'Unknown provenance',
ArtistID INT NOT NULL,
PRIMARY KEY (WorkID),
UNIQUE KEY WorkAK1 (Title,Copy),
FOREIGN KEY ArtistFK (ArtistID)
REFERENCES listofartists (ArtistID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
答案 0 :(得分:2)
为此,您必须先从工作中选择所有artist_id,然后检查这些ID是否不在艺术家表中。
select * from artist where id not in(select artist_id from work)
答案 1 :(得分:0)
Select *
from listofartists a
where not exists(select * from work w where w.artistid = a.artistid)
答案 2 :(得分:0)
SELECT
*
FROM
listofartists
WHERE
ArtistID NOT IN(
SELECT
DISTINCT ArtistID
FROM
work)
也许不是最有效的,但它会做到。
答案 3 :(得分:0)
您需要左边不包括加入:
SELECT *
FROM listofartists as a
LEFT JOIN work as b
ON a.ArtistID = b.ArtistID
WHERE b.ArtistID IS NULL
左边的JOIN将导致左表中的所有结果出现在结果中,因此没有工作的艺术家仍然会在那里,但是正确的表将具有ArtistID
的NULL值,因为它不存在。< / p>
如果您不想要其他提供的答案等嵌套SQL语句,这可能是最干净的方法