mysql查询连接不起作用,但sql“where”的确如此

时间:2011-10-24 13:13:55

标签: mysql sql join

我正在尝试在mysql上运行连接查询我正在使用以下查询:

SELECT `Reservation`.`id`
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code

这仅为“预订”表提供了我的结果,根本没有“费率”表的结果,但以下查询工作正常

SELECT `Reservation`.`id`, rates.id 
FROM `reservations` AS `Reservation`, rates 
WHERE Reservation.postal_code = rates.postal_code

我不确定我做错了什么,有人可以帮忙吗?

修改

我使用的是cakephp,这只是cakephp生成的查询的修改版本,并没有在“select”情况下指定字段,所以我认为不需要。

3 个答案:

答案 0 :(得分:4)

您必须将它们包含在SELECT

SELECT `Reservation`.`id`, rates.* 
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code

在你的第二个查询中,你有rates.id,包括它。

注意:请勿使用您向我们展示的第二个查询中的联接类型。这是一个交叉连接(theta join),会让你的查询变得非常慢。始终使用JOINS。

答案 1 :(得分:0)

第一个查询仅从预订中返回单个列id。您是否期望从费率中看到数据?您必须在关键字SELECT之后提及这些列。

第二个查询包含费率列id

如果修改查询以使它们返回相同的列列表,则它们将产生相似(但不相同的结果)。它们仍然不同,第二个查询可能返回更少的行 - 它不包括具有0个相应速率的保留(因为它使用INNER JOIN)。

答案 2 :(得分:0)

第一个查询未从“费率”表中进行选择。试试这个:

SELECT `Reservation`.`id`, `rates`.`id` 
FROM `reservations` AS `Reservation` 
LEFT JOIN rates ON Reservation.postal_code=rates.postal_code