如何从表中找到通过SQL死亡的人?

时间:2016-06-01 13:24:50

标签: mysql

我有两个疑问:

我有一张表格如下:

AUTHOR
(
authorID int NOT NULL,
authName varchar(255) NOT NULL,
authSurname varchar(255),
authPlaceOfBirth varchar(255),
authDOB date(),
authDoD varchar(255),
PRIMARY KEY (authorID)
) 

现在,我想找到已经去世的作者。也就是说,如果表中存在DoD的值,则它们已经死亡。这该怎么做?也就是说,列中的特定值是否存在?

这样的事情:

SELECT authName
FROM AUTHOR
WHERE authDoD is not NULL? 

其次,我有两张表如下:

TABLE inventory_genre
{
genreID int NOT NULL,
inventoryID int NOT NULL,
PRIMARY KEY (genreID,inventoryID)
}
TABLE INVENTORY 
{
inventoryID int NOT NULL,
title varchar(255),
wholesale int,
markup int,
qtyinStock int, 
Discount int, 
PRIMARY KEY (inventoryID)
}

我想列出清单中没有相关标题的所有类型。我知道我必须减去,但我无法准确地提出它。请指导我正确的方向!

4 个答案:

答案 0 :(得分:2)

不确定我是否理解您在第一个问题中描述的标准,但

select * from author where authDOB is not null;

select * from author where authDOB = 'some value that I dont know';

对于第二个,您可以使用existsin嵌套选择:

select * from genre where id not in (select genreId from inventory_genre);

答案 1 :(得分:1)

第1部分

从逻辑上思考:

  • 您正在寻找被什么引用的人?

    • 他们的死。
  • 你怎么知道他们死了?

    • 因为表格中的某个字段已填写。
  • 你能量化这个吗?

    • 是的,他们的死亡价值存在。

因此,yon可以构建一个SQL搜索,在Authors表中查找行(人员),其中列(authDoD)值不为空/。

  

作为完美世界的注释,您应该在authDoD列中设置IS NULL,这样如果没有设置值,则列行值为NULL,并且在查询中更容易处理。

SQL(假设列可以为空但为空):

SELECT * FROM authors WHERE authDoD > ''

SQL(假设列 只能为空,除非死亡):

SELECT * FROM authors WHERE authDoD IS NOT NULL

第2部分

您想要返回否定搜索,搜索结果没有结果,因此请查找任何库存表行中没有功能的每个类型。

虽然我即将为此写一个更长的答案,但the answer just posted by Tobb完全符合您的要求。

另请注意,理想情况下,您的ID列上应该有一个INDEX,以便更顺畅,更快地遍历它们。

答案 2 :(得分:0)

对于问题的第一部分,您可以使用

SELECT * FROM AUTHOR WHERE authDoD IS NOT NULL;

这将选择已故的人

答案 3 :(得分:-1)

如果您检查authorDoD > '',您的第一个问题就解决了。如果有NULL或空字符串'',它将评估为false。

要解决您的第二个问题,您可以JOIN表格,因为inventoryID不允许NULL

JOIN INVENTORY i ON (inventory_genre.inventoryID = i.inventoryID)

之后,您可以使用title > ''检查上述标题的存在。