好的,这是一个有趣的。我有2个表:tbl_notes,tbl_notes_categories
简单地说,tbl_notes有一个categoryid,我将这两个表与该ID相关联。所以,没有什么太复杂的。
我强制用户从下拉菜单中选择一个类别,如果他们不选择某些内容,则阻止他们提交。
但是,我想改变这一点,主要是为了学习JOIN以及我可以用它们走多远。
Sooooooo,我不会强迫用户选择一个类别,而是在tbl_notes中将categoryid默认为零。 (大多数用户将选择一个类别,但这适用于其他实例)
在查询中,我被锁定只显示tbl_notes_categories表中存在categoryid的注释。但是,如果categoryid未被识别或者等于零,我想要一个条件,然后指定另一个String。比如“--Unssigned--”或“--Category不存在 - ”
这是我的原始查询:
SELECT n.notesubject, c.categoryname
FROM `tbl_notes` n, `tbl_notes_categories` c
WHERE n.categoryid = c.categoryid
这不会让我看到没有categoryid的笔记,所以我拉了这个:
SELECT n.notesubject, c.categoryname
FROM `tbl_notes` n
LEFT JOIN `tbl_notes_categories` c ON n.categoryid = c.categoryid
这有帮助,但是如果类别表中缺少类别记录,我会陷入显示备用文本的“条件”。
答案 0 :(得分:0)
在MySQL中,您可以使用IFNULL:
SELECT
n.notesubject,
IFNULL(c.categoryname, 'Unknown') AS categoryname
FROM tbl_notes AS n
LEFT JOIN tbl_notes_categories AS c
ON n.categoryid = c.categoryid
如果找不到类别,这将有效,但如果类别ID为零,假设您的类别表中没有匹配的行,那么它也会起作用,因为它也将无法找到。如果出于某种原因, 想要在分类表中使用id为零的行,则可以将其名称设置为“未知”。
请注意,IFNULL是MySQL特有的。 COALESCE功能也可以使用,并得到更多数据库的支持。
对于一般在MySQL中的IF / ELSE语句,可以使用IF,或者对于更通用的解决方案,使用CASE表达式:CASE WHEN condition THEN expr1 ELSE expr2 END
。