我想问一个问题,因为我的查询技巧不是很好,我上周一直在学习mySQL。我所附的这个附件显示了当我运行以下查询时会发生什么:
SELECT * FROM clothing, sizing WHERE id = "101";
您可能会注意到它生成相同的ID号,相同的名称,相同的类型,相同的brand_id,相同的价格和大量的空值。是否有一个我可以运行的查询,它只显示没有空值的列?
答案 0 :(得分:0)
您可以在给定列中选择不具有空值的行,也可以使用IFNULL。
IFNULL(yourColumn,0)
这将显示0而不是Null,但要注意NULL和0不是同一个东西。 Null是“无”/未定义,0是数值。
您可以将问题乘以NULL,例如:
SELECT (numProducts * IFNULL(productPrice,0))
FROM ...
您还可以使用CASE或IF来选择不同的列和别名: - )
指向文档的外部链接:https://dev.mysql.com/doc/refman/4.1/en/control-flow-functions.html
答案 1 :(得分:0)
是的以上解决方案只有在该列的默认值设置为null时才有效,如果未设置则需要检查空白,我的意思是说IFNULL(productPrice,0)将不起作用,您需要执行以下操作,
SELECT(numProducts * IF(productPrice ='',0,productPrice)) 来自......
答案 2 :(得分:0)
你基本上是在问我将在这个答案中单独讨论的两个问题。
您应该遵循mathielo和Olavxxx关于使用JOIN
的评论。
您的问题中显示的查询是clothing
和sizing
之间的cartesian product。该查询基本上要求的是“我只希望其中一个表中包含id
101的记录,以及 all 其他表中的记录”。
根据你的其余问题判断,这不是你想要的。所以我认为clothing
和sizing
中的行之间存在关系。我将假设一件衣服只能有一个尺码,并且这种关系由sizing
的外键表示。这里表格应该包含的最小值(我不重复使用你的模型,因为我只能猜测问题中的细节,不知道你的确切表模型是什么):
clothing:
id: primary key
size_id: foreign key to sizing
sizing:
size_id: primary key
因此,以下查询应返回与所选服装和相关尺寸相对应的所有记录:
SELECT *
FROM clothing AS c
JOIN sizing AS s ON c.size_id = s.size_id
WHERE c.id = 101
您的两张桌子之间的关系实际上可能与我刚刚建模的不同。如果是这种情况,我仍然希望上面的例子足以让你开始朝着正确的方向前进。
这部分问题需要加以解决。您是否不希望返回某些列的NULL值记录,或者您只是不想获取这些列的内容?或者您可能想使用默认值?
如果是您要过滤掉的记录,则应在<column> IS NOT NULL
子句中添加WHERE
条件。您感兴趣的每个列都有一个。
如果是您不想获得的列,请不要使用SELECT *
,而是明确列出所需的列,例如:
SELECT id, name, price FROM clothing
如果是关于使用默认值,则需要在IF
子句中使用SELECT
,如Supriya's answer中所示。另一个例子:
SELECT name, size, IF(shoulder IS NULL, 'Default', shoulder)
FROM clothing