mySQL查询只能显示

时间:2014-02-24 22:11:14

标签: php mysql sql database mysql-workbench

我想问一个问题,因为我的查询技巧不是很好,我上周一直在学习mySQL。我所附的这个附件显示了当我运行以下查询时会发生什么:

SELECT * FROM clothing, sizing WHERE id = "101";

您可能会注意到它生成相同的ID号,相同的名称,相同的类型,相同的brand_id,相同的价格和大量的空值。是否有一个我可以运行的查询,它只显示没有空值的列?

t

3 个答案:

答案 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)

你基本上是在问我将在这个答案中单独讨论的两个问题。

1 - 返回多条记录

您应该遵循mathieloOlavxxx关于使用JOIN的评论。

您的问题中显示的查询是clothingsizing之间的cartesian product。该查询基本上要求的是“我只希望其中一个表中包含id 101的记录,以及 all 其他表中的记录”。

根据你的其余问题判断,这不是你想要的。所以我认为clothingsizing中的行之间存在关系。我将假设一件衣服只能有一个尺码,并且这种关系由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

您的两张桌子之间的关系实际上可能与我刚刚建模的不同。如果是这种情况,我仍然希望上面的例子足以让你开始朝着正确的方向前进。

2 - 很多NULL值

这部分问题需要加以解决。您是否不希望返回某些列的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