两个非常相似的查询返回不同的结果,为什么?

时间:2012-02-13 05:09:27

标签: mysql sql

我对这2个问题感到很生气,我无法解释为什么一个人返回81行而另一个人为0.有人可以帮我这个吗?

-- Working
SELECT * FROM
boat_standard_specification_items AS BoatStandardSpecificationItem JOIN standard_specification_items AS StandardSpecificationItem
ON(BoatStandardSpecificationItem.standard_specification_item_id = StandardSpecificationItem .id)

-- Not working
SELECT * FROM
`boat_standard_specification_items` AS `BoatStandardSpecificationItem` JOIN `standard_specification_items` AS `StandardSpecificationItem`
ON (`BoatStandardSpecificationItem`.`standard_specification_item_id` = 'StandardSpecificationItem.id')

我在Windows操作系统上,如果可以以任何方式提供帮助

5 个答案:

答案 0 :(得分:3)

他们不是同一个查询。在第二个,你有:

ON (`BoatStandardSpecificationItem`.`standard_specification_item_id` = 'StandardSpecificationItem.id')
                                                                       ^---

请注意引号的变化。单引号在查询中定义STRING,因此您不会比较两个字段,而是将字段与字符串进行比较。

答案 1 :(得分:1)

您不能将表名放在单引号内。如果你想在它们周围放一些东西以便使它可读,请使用[和]。

答案 2 :(得分:1)

在第二个查询中

`BoatStandardSpecificationItem`.`standard_specification_item_id` = 'StandardSpecificationItem.id'

您正在将BoatStandardSpecificationItemstandard_specification_item_id与字符串'StandardSpecificationItem.id'进行比较

在第一个查询中

SELECT * FROM
boat_standard_specification_items AS BoatStandardSpecificationItem JOIN standard_specification_items AS StandardSpecificationItem
ON(BoatStandardSpecificationItem.standard_specification_item_id = StandardSpecificationItem .id)

您正在将BoatStandardSpecificationItemstandard_specification_item_id与另一列StandardSpecificationItem .id

进行比较

很明显他们会返回不同的结果

答案 3 :(得分:0)

看起来那个“不工作”的人正在使用一个文字字符串来加入(注意单引号)。您的查询的其余部分使用反向标记,因此请尝试一次。

答案 4 :(得分:0)

它们是不同的查询。第二,你试图将字段与你可能不想要的字符串匹配。

(`BoatStandardSpecificationItem`.`standard_specification_item_id` = 'StandardSpecificationItem.id')

您可以详细了解Join