我有两个疑问:
我有一张表格如下:
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)
}
我想列出清单中没有相关标题的所有类型。我知道我必须减去,但我无法准确地提出它。请指导我正确的方向!
答案 0 :(得分:2)
不确定我是否理解您在第一个问题中描述的标准,但
select * from author where authDOB is not null;
或
select * from author where authDOB = 'some value that I dont know';
对于第二个,您可以使用exists
或in
嵌套选择:
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 > ''
检查上述标题的存在。