MySQL没有选择具有给定id的行

时间:2015-03-09 20:07:41

标签: mysql sql

我有两张桌子,一张'气候'表和一张'favourablecrops'表。我想使用此查询为特定位置选择所有有利作物,但它只是选择所有内容而不管指定的'id'

SELECT tbl_climatic.location, tbl_favourablecrops.favCrop 
FROM tbl_climatic, 
     tbl_favourablecrops 
WHERE tbl_climatic._id=tbl_favourablecrops.location_id=0

请帮助

3 个答案:

答案 0 :(得分:2)

使用符合join条件的标准where

SELECT tbl_climatic.location, tbl_favourablecrops.favCrop 
FROM tbl_climatic join
     tbl_favourablecrops on tbl_climatic._id=tbl_favourablecrops.location_id
WHERE tbl_favourablecrops.location_id=0

答案 1 :(得分:1)

您尝试合并join条件和filter条件。使用正确的INNER JOIN并保留JOIN条件ON子句并将过滤器移至where子句

可能是您正在寻找的。

SELECT tbl_climatic.location,
       tbl_favourablecrops.favCrop
FROM   tbl_climatic
       INNER JOIN tbl_favourablecrops
               ON tbl_climatic._id = tbl_favourablecrops._id
WHERE  tbl_favourablecrops.location_id = 0 

答案 2 :(得分:1)

MySQL没有真正的布尔类型 - 而是使用0表示false,1表示true。 (即使它确实有真正的布尔值,它automatically casts values基于它们被使用的表达式 - 所以它不会有任何区别。)

A=B=0被解析为(A=B)=0。因此,表达式减少到A<>B

因此,正如您所想象的那样,过滤仅适用于tbl_climatic._idtbl_favourablecrops.location_id都为零的记录。

您需要执行单独的比较:

WHERE tbl_climatic._id = 0
  AND tbl_favourablecrops.location_id = 0

然而,正如其他人所指出的那样,养成使用显式连接的习惯是很好的做法 - 它们可以帮助避免很多陷阱。