我正在尝试在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”情况下指定字段,所以我认为不需要。
答案 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