简单的SQL脚本

时间:2014-12-31 22:48:46

标签: mysql sql

有人可以告诉我这个查询的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
);

4 个答案:

答案 0 :(得分:2)

为此,您必须先从工作中选择所有artist_id,然后检查这些ID是否不在艺术家表中。

SQL FIDDLE

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语句,这可能是最干净的方法