【发布时间】:2015-07-08 05:01:49
【问题描述】:
我有下一个 mysql 表
如果不存在 `my_app`.`hotel`,则创建表( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NOT NULL, `destination_id` INT NOT NULL, 主键(`id`), INDEX `idx_name` (`name` ASC), 索引`fk_hotel_destination1_idx`(`destination_id` ASC), 约束`fk_hotel_destination1` 外键(`destination_id`) 参考 `my_app`.`destination` (`id`) 删除无操作 更新无动作) 引擎 = InnoDB 如果不存在 `my_app`.`hotel_alias`,则创建表( `id` INT NOT NULL AUTO_INCREMENT, `hotel_id` INT NOT NULL, `name` VARCHAR(45) NOT NULL, 主键(`id`), INDEX `idx_name` (`name` ASC), 索引 `fk_hotel_alias_hotel_idx` (`hotel_id` ASC), 约束`fk_hotel_alias_hotel` 外键(`hotel_id`) 参考 `my_app`.`hotel` (`id`) 删除无操作 更新无动作) 引擎 = InnoDB 如果不存在 `my_app`.`destination`,则创建表( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NOT NULL, 主键(`id`), 索引 `idx_name` (`name` ASC)) 引擎 = InnoDB 如果不存在 `my_app`.`place` 则创建表( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NOT NULL, `destination_id` INT NOT NULL, 主键(`id`), INDEX `idx_name` (`name` ASC), 索引`fk_place_destination1_idx`(`destination_id` ASC), 约束`fk_place_destination1` 外键(`destination_id`) 参考 `my_app`.`destination` (`id`) 删除无操作 更新无动作) 引擎 = InnoDB我想创建一个视图来填充 jquery 自动完成功能,所以我进行了下一个查询
SELECT name, 'hotel' AS type, (SELECT id FROM destination WHERE hotel.destination_id = destination.id) AS destination_id FROM hotel 联盟 SELECT name, 'place' AS type, (SELECT id FROM destination WHERE place.destination_id = destination.id) AS destination_id FROM place 联盟 SELECT name, 'alias' AS type, (SELECT destination.id FROM destination,hotel WHERE hotel_alias.hotel_id = hotel.id AND hotel.destination_id = destination.id) AS destination_id FROM hotel_alias返回以下结果
|名称 |类型 |destination_id -------------------------------------------------- - |酒店 casa maya |酒店 |1 |桑多斯卡拉科尔 |酒店 |2 |卡瓦尼亚斯图卢姆 |酒店 |3 |桑多斯豪华 |酒店 |1 |海洋水疗 |酒店 |1 |sandos playacar |酒店 |2 |沃尔玛 |地点 |1 |沃尔玛 |地点 |2 |中心 |地点 |3 |campo de golf pok-ta-pok |地点 |1 |sandos beach scape |别名 |2 |日落温泉 |别名 |1结果是正确的,但我想知道我是否正确使用“子查询”和“联合”,或者是否有更好的方法通过优化查询来生成相同的结果?
感谢!
【问题讨论】:
-
您的查询为您提供了您想要的结果,这意味着您已经很好地使用了它们 - 但是是的,您可以用另一种方式做到这一点,而无需使用相关的子查询(对外部查询)
标签: mysql database subquery union