我有两张桌子,一张'气候'表和一张'favourablecrops'表。我想使用此查询为特定位置选择所有有利作物,但它只是选择所有内容而不管指定的'id'
SELECT tbl_climatic.location, tbl_favourablecrops.favCrop
FROM tbl_climatic,
tbl_favourablecrops
WHERE tbl_climatic._id=tbl_favourablecrops.location_id=0
请帮助
答案 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._id
和tbl_favourablecrops.location_id
都为零的记录。
您需要执行单独的比较:
WHERE tbl_climatic._id = 0
AND tbl_favourablecrops.location_id = 0
然而,正如其他人所指出的那样,养成使用显式连接的习惯是很好的做法 - 它们可以帮助避免很多陷阱。